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 estyles 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 removidos

Eu 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:

onAbortonBluronChangeonClickonDblClickonDragDroponErroronFocusonKeyDownonKeyPressonKeyUponLoadonMouseDownonMouseMoveonMouseOutonMouseOveronMouseUponMoveonResetonResizeonSelectonSubmitonUnload

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 ehrefs 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 regra

Depois 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

questionAnswers(4)

yourAnswerToTheQuestion