Проблемы при вставке данных с использованием «безопасного способа ввода данных в MySQL с использованием PHP» - PullRequest
0 голосов
/ 17 января 2011

Я пытаюсь ввести данные, используя формы в MySQL, а также используя mysql_real_escape_string для этой цели.К сожалению, у меня проблема с выводом.Он отображает \ s, или, если я использую stripslashes, он удаляет все косые черты.

Если я отправляю web's forms using backslash \, я получаю этот вывод:

"web\'s forms using backslash \\"

Смотрите, я получилдвойной обратный слеш.Но если я использую функцию stripslashes, то она удаляет все косые черты, но также удаляет введенную косую черту, и результат будет

"web's forms using backslash"

Здесь обратная косая черта не отображается, но в конце должна быть одна обратная косая черта.

Проблема в том, что если кто-то использует обратную косую черту в поле пароля и любую другую область, то обратная косая черта будет удалена или отображена дважды. А также, пожалуйста, скажите, что лучше всего подходит для отображения выходных htmlentities или htmlspecialchars

Ответы [ 3 ]

4 голосов
/ 17 января 2011

У вас включены магические кавычки .Вам необходимо полностью их отключить, так как они не очень хороши с точки зрения безопасности.

Установите для них значение off из php.ini (предпочтительно):

; Magic quotes
;

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

Или вы можете отключить ихво время выполнения:

if (get_magic_quotes_gpc())
{
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process))
    {
        foreach ($val as $k => $v)
        {
            unset($process[$key][$k]);
            if (is_array($v))
            {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            }
            else
            {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}
0 голосов
/ 17 января 2011

Безопасный способ ввода данных в MySQL

Проблемы при вставке данных с использованием «сейфа» способ ввода данных в MySQL с помощью PHP »

Вы должны использовать подготовленный оператор PDO (новый улучшенный способ), который безопаснее и быстрее, чем его предшественники (mysql_real_escape_string, etc). Почему вы должны использовать PDO PHP для доступа к базе данных более подробно.

Отображение вывода

Проблема в том, что если кто-то использует обратный слеш в поле пароля и любой другой поданный, то обратный слеш будет быть раздетым или отображенным дважды. Также, пожалуйста, скажите мне, что лучше для отображение выходных htmlentities или htmlspecialchars.

Новый и улучшенный способ - использовать фильтр . В частности, я бы посоветовал вам прочитать все эти Performance and Security слайды от создателя PHP Расмуса Ледорфа. http://talks.php.net/ в целом имеет много хороших слайдов, на которые стоит взглянуть.

0 голосов
/ 17 января 2011

Используйте библиотеку mysqli и подготовленные заявления.Затем все символы вводятся как данные, и вам не нужно возиться со всем этим.

Какие символы НЕ экранируются подготовленным оператором mysqli?

Почему использование подготовленного оператора mysql более безопасно, чем использование обычных escape-функций?

...