Olá.
Preciso desenvolver um sistema que a pessoa possa mandar mensagens em HTML.
Até ai tudo bem, porém por segurança tenho que impedir que a pessoa possa inserir possivel código malicioso como:
<script>, <applet>, <iframe>, <frame>, etc, etc
Não só isso, impedir scripts escondidos como:[code]
[/code]
E transformá-lo em:
[code]
/div>[/code]
Alguém conhece alguma classe pronta que eu possa usar?
Valeu
Se você estiver usando JSTL pode usar o atributo escapeXml=“false” que exite no caso as tags html como texto e não as executa no navegador.
[]s
Não quero eliminar todas as tags, mas apenas agumas.
para eliminar TAGS já tenho a solução:
html.replaceAll("(?i)</?(SCRIPT|FRAME|IFRAME)\\b[^>]*>", "");
O problema é com atributos como:
<div onMouseOver="codigomalicioso"></div>
ou
<div onMouseOver='codigomalicioso'></div>
(repare as aspas que podem ser simples ou duplas, ou ainda inexistentes)
É complicado mesmo. Caso você tiver que fazer na unha, a única dica que sei dar é: (e talvez seja óbvio para você, mas aqui vai mesmo assim) define os tags que devem ser aceitos e os atributos para cada tag que devem ser aceitos, e elimine tudo resto. Senão, a pessoa querendo atacar seu site vai sempre pensar em mais um jeito de diferente de escrever isso.
Ressuscitando meu velho tópico.
A resposta para isto é: www.owasp.org/index.php/Category:OWASP_AntiSamy_Project
Há alguns bugs ainda com ele, mas quebra um galhão
Eu sei que o tópico é velho, porém tive o mesmo problema e acho que outros também podem ter…
Achei outra solução, que é usando o Jsoup…
ai vai um exemplo
String unsafe =
"<p><a href='http://example.com/' onclick='stealCookies()'>Link</a></p>";
String safe = Jsoup.clean(unsafe, Whitelist.basic());
// now: <p><a href="http://example.com/" rel="nofollow">Link</a></p>
tem tudo lah no site deles…
http://jsoup.org/
Boa sorte !!
Atualmente uso esta solução aqui -> http://patapage.com/applications/pataPage/site/test/testSanitize.jsp
No entanto, olhando por alto a solução que você enviou parece ser mais robusta, pois esta ai de cima tive de alterar muitos Bugs que encontrei.
Já a outra solução do owasp, tive de descartar, pois em alguns casos ao limpar algum texto, a coisa simplesmente travava minha aplicação usando toda memoria RAM