Фильтровать нулевой байт в запросе
Я использую библиотеку 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: ');
Может быть, вы должны опубликовать код?
Редактировать: Ваше редактирование немного вводит в заблуждение; Фактический выходной код:
';&lt;%00script&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.