XSS跨站脚本攻击漏洞修复技巧

1,013 阅读1分钟

跨站脚本攻击漏洞出现和修复

跨站脚本攻击,又称XSS代码攻击,也是一种常见的脚本注入攻击。例如在下面的界面上,很多输入框是可以随意输入内容的,特别是一些文本编辑框里面,可以输入例如这样的内容,如果在一些首页出现很多这样内容,而又不经过处理,那么页面就不断的弹框,更有甚者,在里面执行一个无限循环的脚本函数,直到页面耗尽资源为止,类似这样的攻击都是很常见的,所以我们如果是在外网或者很有危险的网络上发布程序,一般都需要对这些问题进行修复。

XSS代码攻击还可能会窃取或操纵客户会话和 Cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务。 [建议措施] 清理用户输入,并过滤出 JavaScript 代码。我们建议您过滤下列字符: [1] <>(尖括号) [2] "(引号) [3] '(单引号) [4] %(百分比符号) [5] ;(分号) [6] ()(括号) [7] &(& 符号) [8] +(加号)

为了避免上述的XSS代码攻击,解决办法是可以使用HttpUitility的HtmlEncode或者最好使用微软发布的AntiXSSLibrary进行处理,这个更安全。

surprise! 500G网络安全学习资料,👉戳此免费获取

微软反跨站脚本库(AntiXSSLibrary)是一种编码库,旨在帮助保护开发人员保护他们的基于Web的应用不被XSS攻击。

编码方法使用场景示例
HtmlEncode(String)不受信任的HTML代码。Click Here [不受信任的输入]
HtmlAttributeEncode(String)不受信任的HTML属性
JavaScriptEncode(String)不受信任的输入在JavaScript中使用
UrlEncode(String)不受信任的URLCnblogs.com
VisualBasicScriptEncode(String)不受信任的输入在VBScript中使用
XmlEncode(String)不受信任的输入用于XML输出[Untrusted input]
XmlAttributeEncode(String)不 受信任的输入用作XML属性Some Text
        protected void Page_Load(object sender, EventArgs e)
        {
            this.lblName.Text = Encoder.HtmlEncode("<script>alert('OK');</SCRIPT>");
        }

例如上面的内容,赋值给一个Lable控件,不会出现弹框的操作。

但是,我们虽然显示的时候设置了转义,输入如果要限制它们怎么办呢,也是使用AntiXSSLibrary里面的HtmlSanitizationLibrary类库Sanitizer.GetSafeHtmlFragment即可。

        protected void btnPost_Click(object sender, EventArgs e)
        {
            this.lblName.Text = Sanitizer.GetSafeHtmlFragment(txtName.Text);
        }

这样对于特殊脚本的内容,会自动剔除过滤,而不会记录了,从而达到我们想要的目的。