我有一个重要的问题要问。
我正在构建我的网站并且它确实很顺利,但是有很多表单可以写入我的数据库,并且在稍后阶段,数据会显示在网站内的其他位置,因此问题是脚本注入攻击。你用什么方式处理它,哪种方法最好?
我有几种方法可以解决这个问题,测试和工作但是哪种方式
1st)使用ValidateRequest =" false"然后server.htmldecode()来解码像
这样的东西<script>alert("Hello")</script> to
<alert>("Hello");<alert>
这一切都很棒。它进入数据库编码但当我将其输出回屏幕时,浏览器重新呈现它,然后它显示警报,这不是我想要的。即使我使用server.htmldecode()
第二篇)我写了一个类,但它是粗糙的,它需要进一步发展但在那里我可以通过类解析一个字符串,它将从字符串中删除html标签并返回修改后的字符串。
3rd)删除ValidateRequest =&#34; false&#34; (所以这是真的)并且在web.config中添加一个错误控件,它将在捕获&#34时重定向到另一个页面(带参数);从客户端检测到一个潜在危险的Request.Form值&#34;事件(或任何错误)。
我已经尝试过Microsoft Anti-Cross Site Scripting库,但我无法使用它。我也以很多方式和形式尝试过RegEx,但没有任何成功。
那么你如何在你的网站上做到这一点?
先谢谢。
答案 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;之间。是的,这将删除
和
等,但我不认为在这个班级中制作白名单会更加困难。
我希望你发现这很有用,我将在以后建立我的项目时尝试改进这门课程。
享受