Эффективность стрип-слэшей против SQL-инъекции?

Возможный дубликат:
Лучший способ защиты от внедрения mysql и межсайтового скриптинга
Как включить переменную PHP в инструкцию вставки mysql

Мне было интересно, сталкивался ли кто-нибудь с оператором stripslashes при получении текста из поле пароля, и есть ли способ выполнить SQL-инъекцию в этом случае?

то есть на языке PHP вы можете получить текст из поля пароля веб-сайта и передать его через оператор stripslashes, чтобы удалить любой ('), так что (' OR 1=1 --) станет (OR 1=1). И делает SQL-инъекции сложными.


person Raven Danes    schedule 07.04.2012    source источник
comment
Если вы проголосовали против этого вопроса или проголосовали так же, объясните почему. Думаю вопрос абсолютно по теме с сайтом.   -  person nico    schedule 07.04.2012
comment
Stripslashes удаляет косые черты, а не кавычки. ' OR 1=1 -- остается ' OR 1=1 -- ...   -  person Konerak    schedule 07.04.2012
comment
@nico - Для закрытых голосов необходимо указать причину. Два человека, проголосовавшие за закрытие (в то время, когда я сделал этот комментарий), сказали: «Не настоящий вопрос»). Я понимаю их точку зрения, это не четко заданный вопрос (и основан на ложной предпосылке).   -  person Quentin    schedule 07.04.2012
comment
@Quentin: закрытое голосование требует выбора причины из нескольких. Мне приходилось несколько раз выбирать один только потому, что я был вынужден, но на самом деле это не была точная причина. Добавление комментария очень полезно (и вежливо) для автора, который, возможно, не знаком с тонкостями сайта. На самом деле это занимает пять секунд.   -  person nico    schedule 07.04.2012
comment
Этот вопрос намного лучше после недавнего редактирования, кстати ...   -  person Randy    schedule 07.04.2012
comment
@nico: Это 500-й вопрос, о боже, я не знаю, о базе данных, объясни мне, как ускользнуть, у нас есть на этом сайте. Достаточно закрыть его без комментария, в частности, если ответы те же самые старые, используйте m_r_e_s или PDO и тип подготовленных операторов.   -  person mario    schedule 07.04.2012
comment
@mario: Я полностью согласен с закрытием для дубликатов и не говорю, что это ХОРОШИЙ вопрос (я не поддерживал его). Как бы то ни было, я закрываюсь без комментариев. Всегда должно быть дано объяснение.   -  person nico    schedule 07.04.2012


Ответы (2)


stripslashes удаляет косые черты (\), которые являются escape-символами, из данных, а не кавычек ('). Во всяком случае, его использование увеличит вероятность существования уязвимости SQL-инъекции.

Чтобы защитить себя от внедрения SQL, используйте подготовленные операторы и параметризованные запросы.

person Quentin    schedule 07.04.2012
comment
Привет. Похоже, я неправильно понял код, который писал. (я новичок в php). mysql_real_escape_string - это то, о чем я имел в виду. - person Raven Danes; 07.04.2012

полоски-слеши не следует использовать в качестве пароля. Потому что это может быть удаление слэшей, которые пользователи вводят намеренно. Чтобы предотвратить выход из SQL-инъекций в соответствии с используемыми rdbms. Это гарантирует, что вы введете ту же самую строку, которую ввел пользователь, но экранировал, поэтому sql-инъекция не произойдет.

Для mysql используйте mysql_real_escape_string

Другой лучший вариант - использовать подготовленный оператор. Он доступен во всех последних версиях драйверов баз данных PHP. Общий алгоритм

  1. Подготовьте заявление. Обычно с помощью функции подготовки
  2. Свяжите ценности. обычно с помощью функции привязки.
  3. выполнить заявление. Обычно функция exec.
person Shiplu Mokaddim    schedule 07.04.2012
comment
Не используйте mysql_real_escape_string, он слишком ручной, и его слишком легко пропустить где-нибудь случайно. Лучше параметризованные запросы. - person Quentin; 07.04.2012