Возможный дубликат:
Использование stripslashes после mysql_real_escape_string
Я читал совсем недавно о предотвращении SQL-инъекций, и я пытаюсь развить некоторое понимание между различными функциями, чтобы я мог изучить основы.
Я прочитал о mysql_real_escape_string
и я понимаю, что он в основном ускользает от символов, которые он считает «особыми», так что он не путает синтаксис SQL?
Теперь, предполагая, что это по крайней мере до некоторой степени истинно, нужно ли использовать функцию stripslashes
сочетании с mysql_real_escape_string
? Мне интересно, что такое stripslashes
и для чего оно предназначено.
Если вы используете stripslashes
при вводе сразу после использования mysql_real_escape_string
, вы эффективно mysql_real_escape_string
его. Вероятно, есть и другие причины использовать stripslashes
, но в моем случае я только когда-либо нуждался в этом, чтобы отменить ужас, который является волшебным кавычками. На самом деле это противоположность addslashes
.
addslashes
не обязательно mysql_real_escape_string
вход так же, как mysql_real_escape_string
, и они не могут использоваться для той же цели.
Даже лучше, чем mysql_*
, вы должны прочитать об использовании подготовленных операторов, таких как PDO
. Тогда вам даже не нужно беспокоиться о mysql_*
или stripslashes
(кроме волшебных цитат).
Функция stripslashes()
будет unescape символов, которые экранированы с помощью stripslashes()
слэша, \
. Он обычно используется для строк, которые экранируются с помощью addslashes()
, или если ваша настройка PHP включает magic_quotes
.
При использовании SQL- mysql_real_escape_string()
функций, таких как mysql_real_escape_string()
, нет необходимости использовать stripslashes()
потому что MySQL-адаптер будет только избегать значений при вставке в базу данных – косые черты не будут оставаться в действительных значениях. Если бы вы использовали stripslashes()
для переменной, которую вы уже mysql_real_escape_string()
с помощью mysql_real_escape_string()
, она удалит косые черты, как если бы она была экранирована с помощью addslashes()
– довольно бессмысленно.
Если ваша цель – предотвратить SQL-инъекцию, я настоятельно рекомендую mysql_
MySQLi или PDO, противоположные старым методам mysql_
. Оба MySQLi и PDO предлагают подготовленные операторы, которые при правильном использовании предотвращают SQL-Injection без необходимости запоминать вызовы специальных функций экранирования или беспокоиться о том, будут ли ваши данные модифицированы.
проверять, выписываться
http://php.net/manual/en/language.types.string.php
http://php.net/manual/en/function.stripslashes.php
http://php.net/manual/en/mysqli.real-escape-string.php
В escape-функции добавляются косые черты «\» для удаления символов, которые могут использоваться для прекращения действительного запроса STRINGS (а не самого запроса), чтобы предотвратить инъекцию. функция stripslashes используется для удаления этих косых черт, однако для их построения в строковых строках запроса нет практического применения при удалении необходимых косых черт.
Результаты из MySQL не «разрезаны» (экранированы), поэтому stripslashes не нужны при работе с результатами.
Функция stripslashes используется для Un-quotes a quoted string
Пример :
<?php echo stripslashes("how\'s going on?"); ?>
Выходом вышеприведенного кода будет:
how's going on?
Больше подробностей: