Функция для проверки обратной косой черты строки для MySQL - PullRequest
1 голос
/ 14 января 2010

Поскольку нет функции, позволяющей проверить, не экранирована ли строка перед ее вводом в базу данных, как я могу сделать это с помощью регулярного выражения?

$string = 'some" string';
if(!preg_match('//',$string))
{
   $string = mysqli_real_escape_string($string);
}

Руководство по PHP:

mysqli_real_escape_string выполняет обратную косую черту символов в кодировке NUL (ASCII 0), \ n, \ r, \, ', "и Control-Z.

Ответы [ 3 ]

4 голосов
/ 14 января 2010

Не пытайтесь сделать это.

Если вы попытаетесь найти способ точно знать, экранирована ли строка или нет, кто-то может просто прийти и создать строку, которая обманет ваш метод обнаружения.

Например, если вы использовали «\» в качестве теста, чтобы убедиться, что слэши не экранированы, я могу просто дать вам строку типа "'; DROP DATABASE dbname(); --\\", которая проходит проверку, но все еще ужасно неверна.

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

4 голосов
/ 14 января 2010

Нет функции для проверки экранирования строки, потому что нет логического способа определить, экранирована ли строка.

It\'s nice

Это сбежало? Откуда вы знаете? Это спасшийся апостроф или не спасшийся обратный слеш и апостроф?

Экранирование - это процесс, а не свойство строки. Вы всегда должны знать, избежали ли вы строки для определенного контекста. Лучший способ сделать это - сохранять строки необработанными и необработанными до тех пор, пока они не перейдут в другой контекст. Так что не вызывайте mysql_real_escape_string, пока вы на самом деле не объединитесь в строку SQL. Не вызывайте htmlspecialchars до тех пор, пока вы не откроете эхом вывод HTML.

2 голосов
/ 14 января 2010

Ты не. Используйте подготовленные операторы и связанные переменные. См. mysqli_prepare и mysqli_stmt_bind_param .

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