Una tecnica per evitare il filtraggio di parole comuni è quella che ho descritto nel titolo.
Tuttavia, perché questa tecnica funziona? SELECT non è lo stesso di SELSELECTECT per esempio.
Diciamo che ho inserito nella lista nera la parola <script>
e lo ho sostituito con niente. Quindi <scr<script>ipt>
diventa <script>
.
Ecco perché i disinfettanti / purificatori html ben scritti applicano le regole in modo ricorsivo. Questo è solo quando l'ultima fase di risanamento non ha apportato modifiche al contenuto, si fermerà / non applicherà un altro giro delle regole di elaborazione. (Probabilmente fallirà e non restituirà alcun contenuto se sono necessari troppi cicli di elaborazione).
Funziona contro i disinfettanti rotti che usano semplicemente s.Replace("select","")
. Quando lo applichi a selselectect
, rimuove il select
nel mezzo, ma poiché non viene eseguito di nuovo sull'output, lo split sel
+ ect
diventa select
e sopravvive al disinfettante.
Questo attacco non funzionerà contro qualsiasi disinfettante sano di mente.
Leggi altre domande sui tag web-application attack-prevention