В данный момент читаю пару книг по безопасности.
Одним из них является Apache Security от Ивана Ристика ( mod_security ), с которым я снова встретился на прошлых выходных. Сохраню длинный обзор в другой раз (я еще не закончил читать), достаточно сказать, что это необходимо прочитать, если вы что-то делаете с Apache. В частности, разработчики PHP, которые склонны видеть только свою небольшую часть стека («Apache — проблема хостов, верно?»).
Другой — PHP-Sicherheit , немецкое издание, одним из авторов которого был Кристофер Кунц , который присутствовал на конференции и говорил о Hardened PHP .
SafeHTML
Также пока не могу сказать много о PHP-Sicherheit , кроме того, что мне нравится то, что я видел до сих пор. Что заставило меня набрать текст, так это упоминание Романа Иванова о SafeHTML — «анти-XSS HTML-парсере, написанном на PHP», которого я раньше не видел. Странным образом это своего рода продукт Sitepointforums, учитывая, что он использует XML_HTMLSax , который в основном был разработан в этой теме .
Теперь SafeHTML действует как фильтр, пытаясь убрать что-нибудь опасное. Общее мнение в Интернете заключается в том, что это практически невозможно сделать — существует так много способов использовать слово «javascript» в качестве протокола к ссылке, например, и IE (к сожалению) очень простителен. Я только взглянул на код, но пока он выглядит убедительно. Например, вот как он имеет дело с анализом протокола связи (только соответствующие биты класса)…
var $blackProtocols = array(
'about', 'chrome', 'data', 'disk', 'hcp',
'help', 'javascript', 'livescript', 'lynxcgi', 'lynxexec',
'ms-help', 'ms-its', 'mhtml', 'mocha', 'opera',
'res', 'resource', 'shell', 'vbscript', 'view-source',
'vnd.ms.radio', 'wysiwyg',
);
// ...
foreach ($this->blackProtocols as $proto) {
$preg = "/[sx01-x1F]*";
for ($i=0; $i<strlen ($proto); $i++) {
$preg .= $proto{$i} . "[sx01-x1F]*";
}
$preg .= ":/i";
$this->_protoRegexps[] = $preg;
}
Должен соответствовать не только «javascript», но также «java script» и многим другим возможным комбинациям, содержащим управляющие символы ASCII.
Похоже, что он умно относится к UTF-7 — еще не рассматривал это внимательно. Еще один хороший знак (как ни странно) — это « сообщения об ошибках », которые также были исправлены.
Тем не менее, до сих пор не совсем убежден — одна вещь, которая меня озадачивает, это то, что он принимает все решения о том, что HTML-код лишен для вас. Будет ли он справляться с табличным тегом большой ширины, который, например, эффективно нарушает дизайн (ОК — это не XSS, а …)? Еще продолжаю расследование… Также было бы хорошо увидеть это где-нибудь вроде Берлиоса или Sourceforge .
В противном случае — примечание стороны (возможно, к Роману) — с тех пор Джефф улучшил производительность (по сравнению с HTMLSax) с помощью нового дизайна, который можно найти здесь .