2012-02-14 3 views
3

Я пытался выяснить, как именно \ x00 \ п \ г \ или \ x1a может привести к SQL-инъекции (как это упомянуто в http://nl3.php.net/manual/en/function.mysql-real-escape-string.php)РНР mysql_real_escape_string и MySQL Injection

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

ответ

-1

давайте предположим, что у вас есть

$SQL="select * from mytable where myfield='$uservalue'" 

\ -> \:

попробовать \' or 1=1; --', после побега цитаты, вы получите \\' or 1=1; --' и SQL будет select * from mytable where myfield='\\' or 1=1; --'

\ x00

Не важно для PHP, но для C

Извините, слишком ленив для отдыха.

+0

сено, спасибо большое за ответ .. У меня в значительной степени было аналогичное представление о обратной косой чертой ** "\" **. Но как насчет ** \ n, \ r, \ x00, \ x1a **? Также, пожалуйста, расскажите подробнее о двойных черточках ** - **, которые вы использовали в приведенном выше примере запроса. –

+0

Я думаю, что вся идея связана только с одной цитатой ... Даже в вашем запросе, если вы удаляете одиночную кавычку; обратная косая черта и двойные черточки, и все остальное не будет иметь никакого эффекта. Однако я обеспокоен ** \ n, \ r, \ x00, \ x1a **, как упоминается в руководстве по php (http://nl3.php.net/manual/en/function.mysql- реальные спусковое string.php). –

2

мне было интересно об этом вопросе, и я нашел ответ в C API documentation of MySQL, говорится:

символы, закодированные в «\», "", «"», NUL (ASCII 0), «\ N», «\ r» и Control + Z (\ x1a). Строго говоря, MySQL требует только этой обратной косой черты и символ кавычки, используемый для цитирования строки в запросе, будет экранирован. mysql_real_escape_string() цитаты другие символы, чтобы сделать их легче читать в файлах журналов.

Это также объясняется в String Literals что:

Клиент MySQL обрезает строки в кавычках, содержащие нулевые символы, если они не убежали, а Control + Z могут быть приняты для END-OF-FILE на Windows, если не сбежать.

Символ NUL представляет собой конец строки на языке C, поэтому это может ложно прекратить входной аргумент клиентской программы mysql. То же самое для \x1a, оно обозначает конец файла под Windows (попробуйте type test.txt в командной строке с символом \x1a в середине файла).

Главное, что администратор может пропустить важную информацию в файле журнала, если его читатель журнала не отображает данные за пределами одного из этих символов. Но кто все еще использует неустойчивую команду type или ее эквивалент под Windows, чтобы все равно прочитать файл журнала?

Другими словами, нет никакой опасности с \n, \r, \0 или \x1a в PHP, кроме потенциально делает файл журнала трудно читать.

Что касается обратной косой черты, \ «OR 1 == 1 будет преобразован в \\» OR 1 == 1, если он не бежал слишком, отменяя эффект экранирования, цитаты.

Смежные вопросы