Страница 249 из 478 Во-первых, не полагаться на встроенное в РНР свойство «волшебных кавычек» (magic quotes), которое автоматически отключает любые символы одинарных и двойных кавычек путем установки перед ними символа обратного слэша (\). Почему? Да потому, что это свойство может быть отключено. Многие программисты именно так и делают, для того чтобы вставить собственный код, обеспечивающий безопасность. Поэтому нет никаких гарантий того, что на вашем рабочем сервере это свойство не было отключено. Фактически в РНР 5.3.0 его использование не приветствовалось, а из РНР 6.0.0 оно вообще было удалено. Вместо этого для всех обращений к MySQL нужно всегда использовать функцию mysq1_real_escape_string. В примере 10.18 показана функция, которую можно использовать, для того чтобы удалить любые «волшебные кавычки», добавленные во введенную пользователем строку, а затем соответствующим образом обезвредить все имеющиеся в ней опасные компоненты. Пример 10.18. Способ обезвреживания данных, введенных пользователем, приемлемый для MySQL <?php function mysql_fix_string($stri ng) { if (get_magic_quotes_gpc()) Sstring = stripslashes(Sstring); return mysql_real_escape_string($string); } Функция getjnagic_quotes_gpc возвращает TRUE, если свойство «волшебных кавычек» находится в активном состоянии. Если это так, любые добавленные к строке слеши подлежат удалению, в противном случае функция mysql_real_ eascape_string может отключить некоторые символы дважды, сделав строки непригодными для дальнейшего использования. В примере 10.19 показано, как можно вставить функцию mysql_fix в ваш код. Пример 10.19. Способ безопасного доступа к MySQL при использовании данных, введенных пользователем <?php Suser = mysql__f i x_st ri ng( $_P0ST[' user' ]):Spass = mysq^_fix_string($_POST[,pass,]); Squery = "SELECT * FROM users WHERE user='$user' AND pass='$pass'"; functi on mysql_fi x_stri ng(Sstring) { if (get_magic_quotes_gpc()) Sstring = stripslashes(Sstring); return mysql jreal_escape_string($string); } Следует запомнить, что функцию mysql_escape_string можно использовать только при активной базе данных MySQL, в противном случае произойдет ошибка.
|