所以,我正在使用DVWA(http://www.dvwa.co.uk/)研究一些PHP安全性。现在,我正在进行一项练习,作者试图教我们在易受攻击的应用程序上执行命令。在此级别中,it adds a very simple blacklist which removes important characters:
$substitutions = array(
'&&' => '',
';' => '',
);
我显然可以使用其他一些字符来执行代码(例如|
,||
,&
等),但我想知道我是怎么做的避免替换单个字符" ;
&#34;。我已经看到了一些例子,这些例子愚弄了代码,例如&#34; <scr<script>ipt>
&#34;我尝过像#34; ;;;
&#34 ;;试图用hex和base64等编码,但它没有用。
有没有办法在寻找单个字符时逃避str_replace()
?这是PHP 5.5.3。
答案 0 :(得分:0)
我不确定为什么作者会展示如何使用黑名单,它太容易被颠覆,也许这个想法在啧啧中被进一步粉碎。 http://en.wikipedia.org/wiki/Secure_input_and_output_handling
虽然您链接到的示例是“中等”级别,但即使是“更难”级别也不使用PHP过滤器FILTER_VALIDATE_IP
即使是REGEX也会做得更好。请参阅页面的下半部分:http://www.regular-expressions.info/examples.html
如果您正在尝试防范XSS攻击(提及错误的脚本标记),那么白名单是可行的方法。验证您希望获得或中止的内容。
修改强>
嗯...现在我看到该网站被称为诅咒易受攻击的网络应用程序,或许这个想法是教你所有可怜的例子......答案 1 :(得分:0)
我发现这个page在我这样做时非常有用。事实证明,还有其他运营商可以使用除了&#39 ;;&#39;插入你自己的命令!
&#34; hard&#34;对此设置目前正在给自己带来一些麻烦,我认为可能有使用URL编码字符的解决方法或类似的东西,但还有待观察。