2015-07-09 2 views
1

Я только что узнал о важности mysql_real_escape_string, чтобы избежать инъекций MySQL. Поэтому я использовал это в своей регистрационной форме на php. Это то, что я получил,mysql_real_escape_string в php, где его использовать?

$password_string = mysql_real_escape_string($_POST['PASSWORD']); 
$username = mysql_real_escape_string($_POST['USERNAME']); 
$fname = mysql_real_escape_string($_POST['FNAME']); 
$mname = mysql_real_escape_string($_POST['MNAME']); 
$lname = mysql_real_escape_string($_POST['LNAME']); 

Вопрос: Есть ли я также необходимо использовать mysql_real_escape_string на формах, которые только проверяет записи в базе данных? или это полезно только в том случае, если вы вставляете данные в базу данных? Я спросил об этом, потому что у меня также есть форма проверки, в которой пользователи будут вводить данные, чтобы увидеть, существуют ли эти записи в базе данных. Мне все еще нужен mysql_real_escape_string для обеспечения безопасности?

Спасибо!

+1

использовать его, когда вы берете входные данные от пользователя, не доверяете пользовательским входам – sandeepKumar

+2

прежде всего прекратите использование 'mysql_ *', это официально устаревшая библиотека. Используйте 'mysqli_ *' или 'PDO'. и в отношении вашего вопроса используйте его, когда вы получили пользовательский ввод. –

+1

Подготовленные утверждения гораздо более безопасны и обновлены, чем mysql_ * ... – Julo0sS

ответ

2

В общем, вы должны заботиться обо всех строках, которые вы каким-то образом вводите в оператор sql, если эти строки не определены буквально и полностью находятся под вашим контролем. Упрощенный, вы можете сказать все, что приходит с клиентской стороны, независимо от того, было ли оно там видимым или скрытым, будь то поле ввода или какие-то другие средства взаимодействия. Все может быть изменено или обработано на стороне клиента. Поэтому никогда не доверяйте тому, что вы получаете оттуда.

Это даже имеет смысл также обрабатывать определенные строки, исходящие из серверной части. Или, очевидно, из других источников данных, таких как удаленные системы, из которых вы извлекаете данные, файлы, которые вы читаете, или да, ваши собственные записи в базе данных, которые вы только что прочитали.

Единственными вещами, которые можно считать сохранением, являются постоянные значения, такие как литералы, числа, числа. Но даже здесь вы должны позаботиться о том, чтобы в них не было символов с особым значением в sql. Так что если сомневаешься, то убегай.


Это говорит ...

старый PHP mysql расширение, которое вы используете ("в mysql функции") устарела давно. Его больше не следует использовать. Пожалуйста, подумайте о том, чтобы портировать код более новым mysqli или PDO. Оба обеспечивают лучшую защиту с помощью «подготовленных операторов» и «привязки параметров». Обе альтернативы имеют отличную документацию в Интернете, и вы можете найти много учебников и примеров для их использования.

3

mysql_real_escape_string используется для исключения специальных символов из данных (которые могут сломать запрос) перед выполнением запроса. Его следует использовать с SELECT , INSERT , UPDATE, DELETE.

Предположим, что пока вы выбираете данные из базы данных: SELECT * from table WHERE id='1' and instead of 1 у нас есть "1", это нарушит ваш запрос. : SELECT * from table WHERE id='1''

Также mysql_real_escape_string осуждается в новой версии PHP, используйте mysqli и попробуйте PDO вместо этого.

+0

его вид странный ..Я пытался использовать mysqli, но не работал. Я запускаю PHP 5.5.24. в моем коде я использую mysql. будет ли проблема, если я использую mysql и mysqli в одном php-файле? – Kimsoyens

+2

mysql_real_escape_string устарел в PHP Ver> = 5.5.0. Оставайтесь с одним i.e mysqli, Как mysql_real_escape_string Его не удаляли с PHP 5, но он, похоже, работает. Но не используйте его. Если вы используете mysqli_real_escape_string, вам следует открыть соединение mysql с mysqi: обратитесь: http://php.net/manual/en/mysqli.real-escape-string.php –

+0

Не используйте оба mysql и mysqli в одном приложении. thoese - это разные «стандартные» способы доступа к mysql - не смешивайте их. mysql-real-eacape ... - это функция mysql. в mysqli существует другой способ выполнить ту же работу. если возможно, используйте pdo. если не предпочитаете mysqli. mysql-xxx само по себе устарели, но я не вижу, чтобы они уходили в ближайшее время – Nick

Смежные вопросы