К вопросу:
http://otvety.google.ru/otvety/thread?tid=30637f640c3537cc
из phpinfo:
magic_quotes_gpc On On
magic_quotes_runtime Off Off
magic_quotes_sybase Off Off
Тогда каким образом обезопасить поля ввода, если не через mysql_real_escape_string()?
Примечание:
Что-то вроде того?
if (!get_magic_quotes_gpc()) {
$test = addslashes($test);
}
Примечание:
ax64, спасибо за развернутый ответ!
К сожалению, мне, как новичку в этом деле, пока не особо понятны все аспекты. Однако, мне посоветовали (знакомые программисты) во всех запросах к БД использовать mysql_real_escape_string().
Ситуация следующая: magic_quotes я отключил, теперь у меня все данные в запросах к бд отсылаются через mysql_real_escape_string(). И все, вроде бы, замечательно (ну, на первый взгляд), только не могу понять, в чем у меня косяк теперь...
Регистрирую пользователя 1'2'3, в БД он также заносится как 1'2'3. На сайте у меня используется вывод данных через htmlspecialchars(), и в некоторых местах данные выводятся корректно (то есть логин выводится как 1'2'3), а в некоторых - не выводится совсем, либо только цифра 1. Ошибку пишет следующую:
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 1 on MySQL result index 14 in /home/l/lukonin/linuksoidi.rf/public_html/myprofile.php on line 38
Выдержка из myprofile.php:
if( isset( $_COOKIE['time'] ) && isset( $_COOKIE['user_login'] ) && check() == TRUE )
{
$profiledatasearch = mysql_query( "SELECT user_login, user_f, user_i, user_o, user_mail FROM users WHERE user_login = '" . mysql_escape_string( $_COOKIE['user_login'] ) . "' LIMIT 1" );
$username = htmlspecialchars(mysql_result($profiledatasearch, $username, user_login));
$user_f = htmlspecialchars(mysql_result($profiledatasearch, $user_f, user_f));
$user_i = htmlspecialchars(mysql_result($profiledatasearch, $user_i, user_i));
$user_o = htmlspecialchars(mysql_result($profiledatasearch, $user_o, user_o));
$user_mail = htmlspecialchars(mysql_result($profiledatasearch, $user_mail, user_mail));
echo
"На этой странице Вы можете изменить свои регистрационные данные, <a href='/профиль'>$username</a>."
Далее следует таблица, в одной из строк которой присутствует переменная $username.
38-я строка - это следующий код:
$username = htmlspecialchars(mysql_result($profiledatasearch, $username, user_login));
В этом случае не выводятся значения $username.
Пробовал заменить просто на:
$username = htmlspecialchars($username);
Тогда в первом случае выводится правильно, а во втором (в поле таблицы) выводится только цифра 1.
Что не так? И правильно ли (логически) я строю защиту?
Примечание:
Я так понимаю, что здесь опять надо через спецфункции аргументы к mysql_result подставлять... Вот только не пойму через какие... С нормальными логинами все работает прекрасно, а вот где кавычки встречаются, там фиг, ошибку выдает.
Примечание:
Фух, все, разобрался (вроде бы)... по крайней мере, теперь ошибок не выдает.
Сделал так:
if( isset( $_COOKIE['time'] ) && isset( $_COOKIE['user_login'] ) && check() == TRUE )
{
$pro = mysql_query( "SELECT user_f WHERE user_login = '" . mysql_escape_string( $username ) . "' LIMIT 1" );
echo $pro;
$profiledatasearch = mysql_query( "SELECT user_f, user_i, user_o, user_mail FROM users WHERE user_login = '" . mysql_escape_string( $username ) . "' LIMIT 1" );
$username = htmlspecialchars($username);
$user_f = htmlspecialchars(mysql_result($profiledatasearch, $user_f, user_f));
$user_i = htmlspecialchars(mysql_result($profiledatasearch, $user_i, user_i));
$user_o = htmlspecialchars(mysql_result($profiledatasearch, $user_o, user_o));
$user_mail = htmlspecialchars(mysql_result($profiledatasearch, $user_mail, user_mail));
echo
"На этой странице Вы можете изменить свои регистрационные данные, <a href='/профиль'>$username</a>.
}
Однако, там, где поле таблицы, идет value='$username', и в итоге выдается только 1, т.к. следующая кавычка закрывает значение value.
Epsiloncool, чем правильнее? Я, например, во всех запросах к бд наоборот убираю одинарные наклонные кавычки.
Примечание:
Эм... просто value написал без кавычек, теперь работает нормально. То есть:
<td ... value=$username>