Внедрение целочисленного ввода базы данных

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

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

Благодарю.

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

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

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

 $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"); 

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

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

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

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

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