это хотя бы слегка безопасный PHP-код?
-
09-09-2019 - |
Вопрос
У меня есть КУЧА переменных $_POST, отправляемых через длинную форму, и вместо жесткого кодирования каждой из них с помощью mysql_escape_string()
можно ли мне сделать следующее?Я не знаю, действительно ли это безопасный и/или жизнеспособный код.
foreach ($_POST as &$post_item){
$post_item = mysql_escape_string($post_item);
}
Я вполне уверен, что, поскольку я использую &, он передает его по ссылке, а не по значению, поэтому я фактически меняю значение в $_POST.
Кроме того, следует ли мне использовать mysql_real_escape_string()
вместо?
РЕДАКТИРОВАТЬ:Я использую PDO и подготовить() вместе с описанным выше методом.Поможет ли это мне?
Решение
Почему бы не использовать array_map()
?
array_map(mysql_real_escape_string, $_POST);
Но на самом деле вам следует использовать параметризованные/подготовленные операторы.
mysql_real_escape_string()
учитывает текущий набор символов базы данных, mysql_escape_string()
не.Таким образом, первое является лучшей альтернативой по сравнению с этим.
Изменить (после редактирования ОП к вопросу):
Поскольку вы уже выполняете подготовленные операторы PDO, нет необходимости изменять ваши значения.PDO обо всем позаботится, в этом вся суть (Если вы действительно помещаете все данные в параметры, то есть - простое объединение строк для построения операторов SQL приводит к катастрофе с PDO или без него).Предварительное экранирование значений приведет к экранированию значений в базе данных.
Другие советы
Да, вам следует использовать mysql_real_escape_string()
, если вы собираетесь пойти по этому пути.Но правильный способ убедиться, что переменные можно безопасно отправлять в базу данных, — использовать Параметризованные запросы которые предоставляются в PHP либо через MySQLi функции или ПДО.
В дополнение к предыдущим комментариям, еще одним преимуществом использования параметризованных запросов является то, что база данных сможет лучше оптимизироваться и, возможно, использовать кэшированный план запросов, чтобы повысить производительность.