Фильтровать нулевой байт в запросе - PullRequest
1 голос
/ 19 июля 2010

Я использую библиотеку htmlpurifier для очистки входящих параметров. Но это не фильтрация нулевых байтов (например,% 00). Я что-то упустил или библиотека не поддерживает это? Должен ли я использовать reg-ex? Спасибо за любые ответы.

Edit:

Я использую htmlpurifier с параметрами конфигурации

$config = HTMLPurifier_Config::createDefault();
$config->set('Core', 'Encoding', "UTF-8");
$config->set('Cache', 'SerializerPath', "/webdirs/htmlpurify");

Для тестовой строки

';</script><%00script>alert(845122)</script>

Я получаю вывод

';<%00script>alert(845122)

Ответы [ 2 ]

2 голосов
/ 19 июля 2010

Похоже, что HTML-очиститель правильно фильтрует эту строку, ЕСЛИ она появляется в коде Javascript.

В Javascript вы хотите отфильтровать все вхождения закрывающего тега, такого как </script>, даже если он появляется в строковом литерале Javascript. В противном случае введение </script> в строковое значение может обойти некоторые неосторожные фильтры и вырваться из строки Javascript в произвольный HTML. Похоже, что очиститель HTML правильно отфильтровал это, удалив этот «тег».

Нет ничего плохого в том, что <%00script> в литеральной строке в Javascript, ЕСЛИ это действительно контекст, в котором оно появляется.

Также обратите внимание, что %00 на самом деле не является нулевым байтом, или PHP, или HTML, или сценарием Javascript. Это знак процента, за которым следуют два нуля. Однако в URL-адресе %00 действительно может интерпретироваться как нулевой байт, и поэтому %00 должен быть отфильтрован из URL-адресов.

2 голосов
/ 19 июля 2010

Как показывают HTMLPurifier / EncoderTest.php и HTMLPurifierTest.php, очиститель HTML очищает нулевые байты:

    $this->assertPurification("Null byte\0", "Null byte");

и

    $this->assertCleanUTF8("null byte: \0", 'null byte: ');

Может быть, вы должны опубликовать некоторый код?

Редактировать: Ваше редактирование немного вводит в заблуждение;Фактический выходной код:

';&amp;lt;%00script&amp;gt;alert(845122)

, который является просто строкой простого текста и совершенно безопасен.Знаки процента не имеют специального значения в HTML.

Если вы хотите поместить строку в URL, используйте urlencode ().

...