Валидатор. Ломаем Small HTTP Server. Scandisk
Наконец-то дошли руки. Написал свой собственный HTML-валидатор. Атрибуты тегов он, можно сказать, не проверяет, главный упор был сделан на проверку правильности построения таблиц. Ни один из валидаторов, которые я смог найти, толком этого делать не умеют. Как сопутствующее, добавил проверку на скрещивание и пропуск тегов. Язык — Perl, но работает довольно шустро. Выкладывать пока не буду — оставлю для собственного пользования.
Тестировал я его под Small HTTP Server (by Max Feoktistov) v 2.03 и решил этот самый сервер «поковырять» на предмет неустойчивой работы и дыр в системе безопасности. Вот что я наковырял:
- Встретив инструкцию <--#exec --> (именно в такой форме), в файле, где разрешены SSI, сервер «падает» с ошибкой при обращении к KERNEL.DLL.
- <--#include virtual="C:/autoexec.bat" --> — выдаст на экран файл autoexec.bat или, при указании другого пути, что-то более интересное. Так что, будьте осторожны, используя эту конструкцию с переменными, переданными странице через GET, в качестве параметра.
- Если знать название хотя бы одного SSI-скрипта, можно, довольно легко, «уронить» сервер дистанционно. Достаточно написать что-то вроде file.shtm?%.
- Посланные несколько раз подряд запросы, вида http://xxx.xxx.xxx.xxx/PRN (можно CLOCK$ или CONFIG$), вызывают, на моем Celeron-466 под Windows 98, долгую 100%-ю загрузку процессора, причем без свопа. То есть, чувствуется, что компьютер сильно тормозит, но от чего, без анализа, непонятно.
- И уж совсем «на сладкое». Запрос вида http://xxx.xxx.xxx.xxx./AUX вызвал у моей 98-й Винды глубокую кому, вывести из которой ее смогла лишь перезагрузка через Reset, тут же повлекшая за собой потерянные сектора и неправильные длинные имена файлов.
Кстати, могу предположить, что под 2000-й, например, что-то из перечисленного может и не сработать. Надо будет как-нибудь попробовать.
L.P.S. Попробовал. Все перечисленное, кроме последнего пункта, работает. Правда, 100%-я загрузка процессора на Windows 2000 не очень-то сказывается, хотя в мониторе видна. По правде говоря, вообще не сказывается. Вот что значит нормальная многозадачность.
Scandisk хвастается:
Папка C:\Windows
была повреждена:
Эта папка содержала одно или более длинных имен файлов,
не связанных с файлами.
Устранение ошибок: Исправить ошибку
Результаты: Ошибка была исправлена.
Программа проверки диска обнаружила на этом диске ошибки и все их исправила.
Почему хвастается? Потому что информации в логе — ноль рублей две копейки. Сколько именно было файлов? Что это были за имена? Как именно scandisk исправил ошибку? А по-другому было нельзя?