Выполняет ли execute($input_parameter)
защиту от SQL-инъекций, как bindParam/bindValue
?
Если ответ да, bindParam()/bindValue()/execute()
неуязвимы для любой атаки sql-inject? Или мне нужно принять меры для предотвращения таких атак ?.
Спасибо за помощь!.
Поскольку execute($input_parameters)
является таким же безопасным, как отдельные bindParam/bindValue/execute
, ответ будет казаться в основном, да.
Тем не менее, вам все равно придется принимать дополнительные меры в зависимости от того, как вы построили строку запроса, которую вы передаете в ваш вызов PDO::prepare
. Не всегда возможно параметризовать все в подготовленной строке запроса. Например, вы не можете использовать параметр для имени таблицы или столбца. Если вы разрешаете данные пользователя или любые внешние данные в этой строке запроса, вы все равно должны дезинфицировать эти данные перед передачей строки для prepare
. Дополнительные сведения см. В этих вопросах stackoverflow:
В общем, вы должны фильтровать все входные данные в любом случае, поэтому, если вы хотите быть более безопасным, вы можете дезинфицировать любые входные данные, предназначенные для материалов типа SQL, используя фильтры, соответствующие вашим потребностям, или даже написать специальную функцию FILTER_CALLBACK, если вы пожелает. В случае имен таблиц или столбцов, исходящих из предоставленных пользователем данных, общая методика проверки – это проверка значений по массивам допустимых имен.
Надеюсь это поможет. Удачи. Будьте в безопасности! 😉
Да, он делает то же самое. Я не могу сказать, что он неуязвим, потому что базовый механизм SQL сам по себе может быть уязвим. Но это действительно не в твоих руках.
По всем практическим причинам, да, это безопасно.
EDIT: посмотрите на документацию PHP (1-й и 2-й примеры). Один из них bindParam()
с bindParam()
а другой использует execute()
.