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

  XSS代码攻击还可能会窃取或操纵客户会话和 Cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务。[建议措施]清理用户输入,并过滤出 JavaScript 代码。我们建议您过滤下列字符:
  [1] <>(尖括号)
  [2] "(引号)
  [3] '(单引号)
  [4] %(百分比符号)
  [5] ;(分号)
  [6] ()(括号)
  [7] &(& 符号)
  [8] +(加号)
  为了避免上述的XSS代码攻击,解决办法是可以使用HttpUitility的HtmlEncode或者好使用微软发布的AntiXSSLibrary进行处理,这个更安全。
  微软反跨站脚本库(AntiXSSLibrary)是一种编码库,旨在帮助保护开发人员保护他们的基于Web的应用不被XSS攻击。


        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);
        }
  这样对于特殊脚本的内容,会自动剔除过滤,而不会记录了,从而达到我们想要的目的。