【问题标题】:Preventing script injection in asp.net website防止asp.net网站中的脚本注入
【发布时间】:2014-08-06 13:02:15
【问题描述】:

我有一个重要问题要问。

我正在构建我的网站,并且进展顺利,但是有许多表单被写入我的数据库,并且在稍后阶段,数据会显示在网站内的其他位置,因此问题是脚本注入攻击。您使用什么方式以及哪种方式最好?

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

1st) 使用 ValidateRequest="false" 然后 server.htmldecode() 来解码类似的东西

<script>alert("Hello")</script> to 
&lt;alert&gt;(&quot;Hello&quot;);&lt;alert&gt;

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

2nd)我写了一个类,但它很粗糙,还需要进一步开发,但是我可以通过该类解析一个字符串,它会从字符串中删除 html 标签并返回修改后的字符串。

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

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

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

提前致谢。

【问题讨论】:

  • 我已经在将它输出到屏幕之前对其进行了htmlencoded。这似乎保留了所有的“<alert>("Hello");<alert>”,但仍然请你的想法。
  • 你试过 Sanitizer.GetSafeHtmlFragment(YourString) 吗? codeproject.com/Articles/617043/…
  • Deepu,我再试一次告诉你。
  • Deepu,成功了,谢谢。网上似乎没有关于这个库的文档。您可以将某些标签列入白名单或黑名单吗?
  • 嗯,你可以在 MSDN 或 stackoverflow.com 中找到

标签: asp.net regex code-injection


【解决方案1】:

在尝试了 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 中,你可以使用 class 并使用以下 ...

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

newHTML 字符串的结果将只是 "Hello"

为什么?因为该类将使用 Microsoft Sanitizer 类来删除任何有害标签,而该类的其余部分将在其间去除任何带有 的标签。是的,这将删除

等等,但我不认为在这个类中创建白名单会更困难。

我希望你觉得这很有用,我会在未来构建我的项目时尝试改进这个课程。

享受

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 2011-04-30
    • 2013-02-28
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多