Безопасность ввода с "(int)" в PHP? - PullRequest
8 голосов
/ 25 декабря 2010

(int)$_POST['post_id'] действительно безопасно? Разве это не позволяет отрицательные целые числа?

Ответы [ 5 ]

11 голосов
/ 25 декабря 2010

Предполагая, что вы имеете в виду safe в терминах SQL-инъекция или XSS-атаки , тогда возможно да. Приведение к int только гарантирует, что значение является целым числом. Целое число не является обычно опасным в любом контексте. Это не гарантирует сохранность целого числа . Это может быть 0, который может иметь или не иметь особого значения в вашем коде, например, при сравнении с false. Или это может быть отрицательным, что, опять же, может иметь или не иметь каких-либо побочных эффектов в вашем коде.

«Безопасность» не абсолютная вещь. Сама строка "1 = 1; DROP TABLE users" тоже довольно безопасна . Это зависит только от контекста, в котором вы его используете. Точно так же, 0 совершенно безопасен, пока ваш код не включает if (!$number) deleteAllUsers();.

3 голосов
/ 25 декабря 2010

Для (int) в PHP:

decimal     : [1-9][0-9]*
            | 0

hexadecimal : 0[xX][0-9a-fA-F]+

octal       : 0[0-7]+

binary      : 0b[01]+

integer     : [+-]?decimal
            | [+-]?hexadecimal
            | [+-]?octal
            | [+-]?binary           

Никогда не приводите неизвестную дробь к целому числу, поскольку это иногда может привести к неожиданным результатам

Проверьте документацию PHP по целым числам .

3 голосов
/ 25 декабря 2010

Это «безопасно», в зависимости от того, что вы хотите сделать.Он будет приводить переменную только к целому числу, если речь идет об использовании памяти PHP s.Это позволит отрицательные целые числа.

1 голос
/ 25 декабря 2010

Использование int для типа подсказка приведение, как

php -r "var_dump( (int) '123d');"
>>> int(123)

php -r "var_dump( (int) '-123d');"
>>> int(-123)

php -r "var_dump( (int) '<script>alert(false)</script>');"
>>> int(0) (xss, no problem)

безопасно для отрицательных целых чисел

моя ошибка: тип подсказки применим толькомассив и объект

подробнее о приведении типа

0 голосов
/ 02 сентября 2011

Да, это "безопасно" с точки зрения внедрения SQL или XSS-атак.

Кроме того, если вы используете целые числа без знака (без отрицательных значений) для первичных ключей или других полей в вашей базе данных (для экономии места), вам необходимо использовать PHP-функцию abs () и приведение типов для предотвращения необработанных ошибок:

$safe_int = abs((int)$_POST['post_id']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...