XSS - Quais tags e atributos HTML podem acionar eventos Javascript?
Estou tentando codificar um purificador HTML seguro e leve, baseado em lista branca, que usará DOMDocument. Para evitar complexidade desnecessária, estou disposto a fazer os seguintes compromissos:
s comentários @HTML são removidosscript
estyle
s tags @ são removidas todas junt apenas os nós filhos dobody
tag será retornadatodos os atributos HTML que podem acionar eventos Javascript serão validados ou removidosEu tenho lido muito sobre ataques e prevenção de XSS e espero não estar sendo muito ingênuo (se for, por favor me avise!) Ao assumir que, se eu seguir todas as regras que mencionei acima, vou esteja seguro do XSS.
O problema é que não tenho certeza de quais outras tags e atributos (em qualquer versão [X] HTML e / ou versões / implementações de navegadores) podem acionar eventos Javascript, além dodefault Atributos de evento Javascript:
onAbort
onBlur
onChange
onClick
onDblClick
onDragDrop
onError
onFocus
onKeyDown
onKeyPress
onKeyUp
onLoad
onMouseDown
onMouseMove
onMouseOut
onMouseOver
onMouseUp
onMove
onReset
onResize
onSelect
onSubmit
onUnload
Existem outros atributos de eventos não padrão ou proprietários que podem acionar eventos Javascript (ou VBScript, etc ...) ou execução de código? Eu posso imaginarhref
, style
eaction
, por exemplo
<a href="javascript:alert(document.location);">XSS</a> // or
<b style="width: expression(alert(document.location));">XSS</b> // or
<form action="javascript:alert(document.location);"><input type="submit" /></form>
Provavelmente vou remover qualquerstyle
atributos nas tags HTML, oaction
ehref
s atributos @ representam um desafio maior, mas acho que o código a seguir é suficiente para garantir que seu valor seja um URL relativo ou absoluto e não um código Javascript desagradável:
$value = $attribute->value;
if ((strpos($value, ':') !== false) && (preg_match('~^(?:(?:s?f|ht)tps?|mailto):~i', $value) == 0))
{
$node->removeAttributeNode($attribute);
}
Então, minhas duas perguntas óbvias são:
stou perdendo tags ou atributos que podem acionar evento Existe algum vetor de ataque que não seja coberto por essas regraDepois de muitos testes, ponderações e pesquisas, criei o seguinte (bastante simples) implementação, que parece imune a qualquer vetor de ataque XSS que eu possa jogar nel
Eu aprecio muito todas as suas respostas valiosas, obrigad