Я пытаюсь создать безопасный и легкий очиститель HTML на основе белого списка, который будет использовать DOMDocument. Чтобы избежать ненужных сложностей, я готов пойти на следующие компромиссы:
script
и теги стиля
удаляются все вместе body
будет возвращен Я много читал о XSS-атаках и предотвращении, и я надеюсь, что ' m не слишком наивен (если да, дайте мне знать!), предполагая, что если я буду следовать всем правилам, упомянутым выше, я буду в безопасности от XSS.
Проблема в том, что я не уверен, какие еще теги и атрибуты (в любой версии [X] HTML и / или версиях / реализациях браузера) могут инициировать события Javascript, помимо атрибутов событий Javascript по умолчанию :
onAbort
onBlur
onChange
onClick
onDblClick
onDragDrop
onError
onFocus
onKeyDown
onKeyPress
onKeyUp
onLoad
onMou seDown
onMouseMove
onMouseOut
onMouseOver
onMouseUp
onMove
onReset
onResize
onSelect
onSubmit
onUnload
Есть ли другие не- атрибуты событий по умолчанию или проприетарные атрибуты, которые могут запускать события Javascript (или VBScript и т. д.) или выполнение кода? Я могу вспомнить href
, style
и action
, например:
XSS // or
XSS // or
Я, вероятно, просто удалю все атрибуты стиля
в HTML-теги, атрибуты action
и href
представляют большую проблему, но я думаю, что следующего кода достаточно, чтобы убедиться, что их значение является относительным или абсолютным URL-адресом, а не каким-то неприятным кодом Javascript. :
$value = $attribute->value;
if ((strpos($value, ':') !== false) && (preg_match('~^(?:(?:s?f|ht)tps?|mailto):~i', $value) == 0))
{
$node->removeAttributeNode($attribute);
}
Итак, у меня есть два очевидных вопроса:
После большого количества запросов тестирование, размышления и исследования Я придумал следующую (довольно простую) реализацию , которая, кажется, неуязвима для любого вектора атаки XSS, который я мог бы использовать.
Я высоко ценю все ваши ценные вещи. ответы, спасибо.