你如何与所有这些方式作斗争? -Javascript及其百万种不同的编写方式

时间:2010-06-19 06:34:48

标签: c# javascript asp.net-mvc security

我只是不知道该怎么想。看起来制作javascript的人们不遗余力地允许它以百万种不同的方式编写,以便黑客可以有一个实地日。

我终于通过使用html敏捷包获得了我的白名单。它应该删除

<scrpit></script>

因为它不在我的白名单加上任何onclick,onmouse等等。

但现在看来你可以在属性标签中编写javascript。

<IMG SRC="javascript:alert('hi');">

由于我允许SRC属性,因此我的白名单无法帮助我。所以我提出了在最后查看所有有效属性并查看它们内部的想法。

所以它会找到每个html标签的所有允许属性(所以src,href等)。

然后我找到了innertext并把它放到小写字母中。然后,我对此字符串进行了“javascript”的索引检查。

如果找到索引,我就从该索引开始,并从该索引中删除每个字符。所以在上面的例子中,属性将保留为Src =“”。

现在看起来不够好,因为你可以做类似

的事情

java脚本 jav ascript

并且可能是每个字母之间的空格。

所以我不知道如何阻止它。如果它只是java和脚本之间的空间,那么我可以写一个简单的正则表达式,它不关心它们之间有多少空格。但如果确实你可以在每个字母后放一个空格或标签或其他什么,那么我就不知道了。

然后最重要的是你也可以做所有其他好方法

   <IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;> // will work apparently
    <IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041> // will work apparently
    <IMG SRC="jav    ascript:alert('XSS');"> // will work apparently
    <IMG SRC="jav&#x09;ascript:alert('XSS');">// will work apparently
    <IMG SRC="jav&#x0A;ascript:alert('XSS');"> // will work apparently
    <IMG SRC="jav&#x0D;ascript:alert('XSS');"> // will work apparently

http://ha.ckers.org/xss.html

我知道这是针对一些交叉脚本攻击(我没有制作XSS asp.net mvc已经很好地完成了这个)但我不明白为什么它不能用于其他类似的事情所有这些例子都会发出警报,因此它可以用于其他事情。

所以我不知道如何检查和删除任何这些。

我正在使用C#,但我不知道如何阻止任何这些,并且不知道C#中的任何可以帮助我的东西。

2 个答案:

答案 0 :(得分:6)

似乎你想要清理javascript,为此你在C#/ .Net中实际上有一个很好的解决方案。

从CodePlex下载Microsoft Web Protection Library

如果你通过Microsoft.Security.Application.AntiXss.GetSafeHtmlFragment(html)运行你的html片段,那么你将得到这个输出:

<img src=""> // will work apparently
<img src=""> // will work apparently
<img src=""> // will work apparently
<img src="">// will work apparently
<img src=""> // will work apparently
<img src=""> // will work apparently

清除所有脚本。

答案 1 :(得分:0)

制作一个页面说redir 现在,在表单提交后,获取所有src属性的值并将其替换为 redir?src=theExactValueHere 现在,redir程序首先从服务器端下载GET参数src的值(最终是src属性的实际值)然后转发内容,因为它包含完全相同的MIME /类型 它也可以执行一些检查属性的值,然后执行Header Redirection。

还有更多方法但我认为这也是最简单和可靠的。