2016-03-27 26 views
-2

我有以下的php XSS过滤器功能:这段代码是否真的XSS证明?

<?php 
function xssfilter($inp){ 
    $inp = html_entity_decode(urldecode($inp)); 
    $inp = preg_replace('/!/','',$inp); 
    if (preg_match('/script|on|xmlns|data/iu',$inp)){ 
     while(preg_match('/script|on|xmlns|data/iu',$inp)){ 
      $inp = preg_replace('/(script)|(on)|(xmlns)|(data)/iu','NO!',$inp); 
     } 
    } 
    return $inp; 
} 
?> 

很明显,你可以在这里上传远程脚本,但我在这里的问题是,如果你可以绕过在某些方面正则表达式?

+0

这个问题听起来像一个琐事问题。 –

+1

看起来写这个函数的人对于如何清理内容没有很好的理解。 URL解码,实体解码,替换感叹号,替换afew关键字......看起来他们只是把问题扔在了问题上,希望它能完成这项工作。 –

回答

0

不,这至少有一个明显的缺陷。您可以插入包含JavaScript像这样的链接标签:

<a href="&#x26;&#x23;&#x78;&#x36;&#x41;&#x3B;&#x26;&#x23;&#x78;&#x36;&#x31;&#x3B;&#x26;&#x23;&#x78;&#x37;&#x36;&#x3B;&#x26;&#x23;&#x78;&#x36;&#x31;&#x3B;&#x26;&#x23;&#x78;&#x37;&#x33;&#x3B;&#x26;&#x23;&#x78;&#x36;&#x33;&#x3B;&#x26;&#x23;&#x78;&#x37;&#x32;&#x3B;&#x26;&#x23;&#x78;&#x36;&#x39;&#x3B;&#x26;&#x23;&#x78;&#x37;&#x30;&#x3B;&#x26;&#x23;&#x78;&#x37;&#x34;&#x3B;: alert('XSS');">Innocent Link</a> 

停止在Chrome这种攻击的唯一事情是它内置了XSS保护的事实。您的XSS保护不会阻止它。