Фильтровать нулевой байт в запросе

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

Редактировать:

Я использую 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 ответа

Решение

Как показали 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().

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

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

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

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

Другие вопросы по тегам