mysql_real_escape_string для многобайтовых без подключения? - PullRequest
4 голосов
/ 04 февраля 2011

давайте рассмотрим, я всегда буду делать соединение

SET NAMES 'utf8'

с mysql (поэтому мне нужны многобайтовые экранированные символы).

Есть ли безопасная альтернатива mysql_real_escape_string, которая не требует подключения mysql?

На официальной странице я нашел комментарий , который использует str_replace, например:

if(!empty($inp) && is_string($inp)) { 
    return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"),
                       array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z') , $inp); 
} 

этого достаточно?

И почему mysql_real_escape_string нуждается в текущем наборе символов, если он будет экранировать только те же значения?(как описано на официальной странице php.net/mysql_real_escape_string)

спасибо

Ответы [ 3 ]

1 голос
/ 07 декабря 2012

Во-первых, существует множество библиотек абстракции базы данных

(я использовал dbFacile раньше: https://github.com/alanszlosek/dbFacile).

и предварительно подготовленные операторы sql ВСЕГДА aотличная идея.

но для вашего актуального вопроса ...

из этого поста: Альтернатива mysql_real_escape_string без подключения к БД

я действительно так думаюхорошая альтернатива:

public function escape($string) {
    $return = '';
    for($i = 0; $i < strlen($string); ++$i) {
        $char = $string[$i];
        $ord = ord($char);
        if($char !== "'" && $char !== "\"" && $char !== '\\' && $ord >= 32 && $ord <= 126)
            $return .= $char;
        else
            $return .= '\\x' . dechex($ord);
    }
    return $return;
}
0 голосов
/ 08 мая 2011

Вы должны использовать mysql_real_escape_string. Когда вы делаете фильтр самостоятельно, у вас всегда будет шанс, что хакер сделает обходной путь. С другой стороны, Mysql_real_escape_string всегда актуальна. Создание подключения mysql не слишком много работы, если вы это имеете в виду. Большинство моих сайтов устанавливают соединение при каждом просмотре страницы, и они все еще работают;)

0 голосов
/ 04 февраля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...