在asp.net网站上防止脚本注入

时间:2014-08-06 13:02:16

标签: asp.net regex code-injection

我有一个重要的问题要问。

我正在构建我的网站并且它确实很顺利,但是有很多表单可以写入我的数据库,并且在稍后阶段,数据会显示在网站内的其他位置,因此问题是脚本注入攻击。你用什么方式处理它,哪种方法最好?

我有几种方法可以解决这个问题,测试和工作但是哪种方式

1st)使用ValidateRequest =" false"然后server.htmldecode()来解码像

这样的东西
<script>alert("Hello")</script> to 
&lt;alert&gt;(&quot;Hello&quot;);&lt;alert&gt;

这一切都很棒。它进入数据库编码但当我将其输出回屏幕时,浏览器重新呈现它,然后它显示警报,这不是我想要的。即使我使用server.htmldecode()

第二篇)我写了一个类,但它是粗糙的,它需要进一步发展但在那里我可以通过类解析一个字符串,它将从字符串中删除html标签并返回修改后的字符串。

3rd)删除ValidateRequest =&#34; false&#34; (所以这是真的)并且在web.config中添加一个错误控件,它将在捕获&#34时重定向到另一个页面(带参数);从客户端检测到一个潜在危险的Request.Form值&#34;事件(或任何错误)。

我已经尝试过Microsoft Anti-Cross Site Scripting库,但我无法使用它。我也以很多方式和形式尝试过RegEx,但没有任何成功。

那么你如何在你的网站上做到这一点?

先谢谢。

1 个答案:

答案 0 :(得分:0)

尝试了Deepu所说的我做了以下事情。也许对别人有用。

Public Class Encode

Public Function htmlEncode(html As String) As String
    Dim newhtml As String = Sanitizer.GetSafeHtmlFragment(html)
    Dim posstart As Integer
    Dim posend As Integer

    For l = 1 To newhtml.Length
        posstart = InStr(l, newhtml, "<", CompareMethod.Text)
        posend = InStr(l, newhtml, ">", CompareMethod.Text)
        If posstart <> 0 And posend <> 0 Then
            newhtml = newhtml.Remove(posstart - 1, posend - posstart + 1)
            l = 0
            posstart = 0 : posend = 0
        End If
    Next

    Return newhtml
End Function

End Class

所以在VB中,你可以使用类并使用以下内容......

Dim doEncode as New Encode
Dim newHTML as String = doEncode.htmlEncode("<script>alert('Hello');</script><b>Hello</b>")

newHTML字符串的结果只是“Hello”

为什么呢?因为该类将使用Microsoft Sanitizer类删除任何有害标记,并且该类的其余部分将使用&lt;删除任何标记。 &GT;之间。是的,这将删除

等,但我不认为在这个班级中制作白名单会更加困难。

我希望你发现这很有用,我将在以后建立我的项目时尝试改进这门课程。

享受