Очистка целочисленного входа базы данных

У меня есть приложение, которое берет данные через запрос POST. Я использую эти данные для вставки новой строки в базу данных. Я знаю то использование mysql_real_escape_string() (плюс удаление % и _), путь состоит в том, чтобы пойти для строк, но что относительно целочисленных значений? Прямо сейчас я использую функцию PHP intval() на них.

Однако я хотел удостовериться это intval() совершенно безопасно. Я не вижу способ взломщика, формующего атаку с использованием кода на SQL, когда переменные пробегаются intval() сначала (так как это всегда возвращает целое число), но я хотел удостовериться дело обстоит так от людей, которые имеют больше опыта, чем я.

Спасибо.

7
задан Dan D. 8 July 2010 в 21:16
поделиться

4 ответа

Да, intval () безопасен. Нет абсолютно никакого способа выполнить SQL-инъекцию, когда параметр преобразован в целое число, потому что (очевидно) формат целого числа не позволяет помещать в него ключевые слова SQL (или кавычки, или что-то еще).

21
ответ дан 6 December 2019 в 06:13
поделиться

Подготовленное состояние - лучший способ справиться с внедрением sql. или используйте PDO в противном случае intval лучше, чем is_numeric

2
ответ дан 6 December 2019 в 06:13
поделиться

Самый простой способ предотвратить SQL-инъекции - всегда использовать подготовленные утверждения. Используйте библиотеки mysqli или, еще лучше, ORM, такие как doctrine и т.д.

Тогда ваши запросы станут чем-то вроде:

$stmt = $db->prep_stmt("select * from .... where userid = ? and username = ?");

/* Binding 2 parameters. */
$stmt->bind_param("is", $userid, $username);

$userid = 15;
$username = "don";

/* Executing the statement */
$stmt->execute( ) or die ("Could not execute statement");
4
ответ дан 6 December 2019 в 06:13
поделиться

Я всегда делаю

$var = (int)$_POST['var'];

чтобы убедиться, что $var обрабатывается как целое число при любых обстоятельствах, и никогда больше не смотрю на $_POST['var']. Если посмотреть руководство, то intval() делает точно так же.

Каким бы путем вы ни пошли, в дальнейшем $var будет настоящим целым числом, с которым вполне безопасно работать.

2
ответ дан 6 December 2019 в 06:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: