[转]常用Html辅助方法对XSS攻击的抵抗力

ASP.NET & jQuery注意小细节来防止XSS攻击

    • 前言

      在开发网站时最害怕的莫过于开发人员写出了一个具有被攻击性的网站,而其实很多开发人员如果一不注意就会踏进了 Cross-Site Scripting(XSS)的地狱,解决方法很简单但却也很容易踏进去,以小弟来说就也曾经跳进去很多次,尤其式透过 jQuery 在操作动态网页时很容易没想清楚就用错方法导致 XSS 错误发生,所以这边笔者整理了几种在撰写上的技巧来跟大家分享如何防止XSS攻击。

      XSS 指令码攻击

      我们先看下底下这个画面,这是一个简单的讯息发送窗口,而倘若今天黑客在窗口内输入 Javascript 片段,将会造成这样的结果:

      想象一下这是多恐怖的行为,代表黑客只要了解 Javascript 就可以开始扰乱你的网站,值得注意的是如果显示内容的方式,是让使用者输入后送出显示或是透过 Ajax 取得页面数据并显示的话,就需要注意有 XSS 的危险存在。

      防范小技巧

      1.一般我们在开发网站过程中,有可能为了项目的需求而暂时关闭基本防护的功能,所以在上线前记得检查一下 web.config 的设定是不是正常。

      <system.web>
         <pages validateRequest="true" /> //预设为 ture => 开启防护
      </system.web>

      2.常见的方法可以利用 Server.HtmlEncode 来对内容进行编码:

      string value = Server.HtmlEncode("<script>alert(‘XSS 攻击‘);</script>");而如果使用的 .Net Framework 为 4.5的版本可以利用新的方法 AntiXssEncoder.HtmlEncode 来对内容进行编码:

      // 需引用 System.Web.Security.AntiXss;
      string value = AntiXssEncoder.HtmlEncode("<script>alert(‘XSS 攻击‘);</script>", true);3.若使用 ASP.NET MVC 进行开发,在 View 里利用 Html Helper 显示数据时也已经帮我过处理大部分的安全性问题。

      首先我们先故意做一个会造成 XSS 攻击的恶意程序代码,这是在 ASP.NET MVC 中的 Controller

      public ActionResult Index()
              {
                  TestModel model = new TestModel();
                  model.XssAtack = "<script>alert(‘攻击‘);</script>";
                  return View(model);
              }

      下面示范几种在 View 中显示数据的方法,来检验各个方法对于 XSS 的防范机制:

      @Html.DisplayFor(p => p.XssAtack) 攻击失败,显示纯文字

      @Html.DisplayForModel() 攻击失败,显示纯文字

      @Html.EditorFor(P => P.XssAtack) 攻击失败,显示 input 卷标

      @Html.Encode(Model.XssAtack) 攻击失败,将内容进行编码@Html.Raw(Model.XssAtack) // 攻击成功,跳出 alert 窗口

      @Html.DisplayTextFor(P => P.XssAtack)  // 攻击成功,跳出 alert 窗口测试结果中显示 Html.Raw 和 Html.DisplayTextFor 会造成 XSS 攻击的问题,所以在开发 ASP.NET MVC 时也应该小心使用这些 Html Helper,你防止不必要的问题发生,反观如果需求就是要跳出一段 alert 来提醒使用者,也可以利用这两种方法来做数据显示。www.it165.net

      4.在 jQuery 中我们也应该小心使用 .html 的方法。

      错误示范二

      <table>
          <tbody>
              <tr>
                  <td class="td1"></td>
              </tr>
          </tbody>
      </table>

      <script>
          var result = "<script>alert(‘攻击成功‘)";
          //透过.html的方法会将内容输出成html,将有机会造成XSS攻击
          $(".td1").html(result);
      </script>

      如果只是单纯显示 td 内容应该使用 .text 的方法来设定值

      $(".td1").text(result);错误示范二

      假设我们透过 Ajax 的方式取得表格内容,并利用 .html 设定数据将会发生 XSS 攻击问题。

      Controller:

      public JsonResult GetData()
              {
                  var data = new { id = "s001", name = "<script>alert(‘XSS 攻击‘)</script>" };
                  return Json(data, JsonRequestBehavior.AllowGet);
              }View:

      <table id="GridContent">
      </table>

      <script>
              $(function () {
                  $.getJSON("/Home/GetData/", function (data) {
                      var tr = "";
                      tr += "<tr>";
                      tr += "<td>" + data["id"] + "</td>";
                      tr += "<td>" + data["name"] + "</td></tr>";
                      $("#GridContent").html(tr);
                  });
              });
      </script>

      解决方法可以直接改变原本的写法,让我们透过 jQuery 去选取到 $(td) 的对象,并直接对 td 设定值,当然这样的作法在效能上真的不是很优,毕竟如果自料很多的话会花费很大的效能,当然更精确的作法还是直接从 Server 端就进行编码来防范这个问题,而当然还是有其它作法像是以 Regex 表示式来对字符串进行检查...,但作法就比较复杂一点了。

      5. 透过 Ajax 呼叫时利用 encodeURIComponent 对参数进行编码

      var arg = encodeURIComponent("http://tw.yahoo.com");
       $.getJSON("/Home/GetData/", { id: arg  },function(data){
           // do somthing
      });

      总结

      其实说了那么多防范的方法,主要的问题还是在于当使用者一开始进行输入时就该做完整的验证,不应该让使用者传出去的数据有机会出现造成程序的漏洞,前端验证后端在进行数据把关,才能让我们的网站把持最佳化。

      原文:http://www.it165.net/pro/html/201305/5947.html

时间: 2024-10-29 19:10:55

[转]常用Html辅助方法对XSS攻击的抵抗力的相关文章

ASP.NET MVC5(三):表单和HTML辅助方法

表单的使用 Action和Method特性 Action特性用以告知浏览器信息发往何处,因此,Action特性后面需要包含一个Url地址.这里的Url地址可以是相对的,也可以是绝对的.如下Form标签向Bing的search页面发送一个搜索词(输入元素的名称为q). <form action="http://www.bing.com/search"> <input name="q" type="text" /> <i

认识黑客常用的入侵方法

认识黑客常用的入侵方法 导读 在Interent中,为了防止黑客入侵自己的计算机,就必须了解黑客入侵目标计算机的常用方法.黑客常用的入侵方法有数据驱动攻击.系统文件非法利用.伪造信息攻击 以及远端操纵等,下面就简单介绍这些入侵方法. 数据驱动攻击 数据驱动攻击是指黑客向目标计算机发送或复制的表面上看来无害的特殊程序被执行时所发起的攻击.该攻击可以让黑客在目标计算机上修改与网络安全有关的文件,从而使黑客在下一次更容易入侵该目标计算机.数据驱动攻击主要包括缓冲区溢出攻击.格式化字符串攻击.输入验证攻

XSS攻击原理

本文转载的地址:http://www.2cto.com/Article/201209/156182.html Xss(cross-site scripting)攻击指的是攻击者往Web页面里插入恶意html标签或者javascript代码,当用户浏览该页或者进行某些操作时,攻击者利用 用户对原网站的信任,诱骗用户或浏览器执行一些不安全的操作或者向其它网站提交用户的私密信息. 比如:攻击者在论坛中放一个看似安全的链接,骗取用户点击后,窃取cookie中的用户私密信息:或者攻击者在论坛中加一个恶意表

XSS 防范XSS 攻击的措施

首先看看跨站脚本漏洞的成因,所谓跨站脚本漏洞其实就是Html的注入问题,恶意用户的输入没有经过严格的控制进入了数据库最终显示给来访的用户,导致可以在来访用户的浏览器里以浏览用户的身份执行HTml代码,数据流程如下: 恶意用户的Html输入————>web程序————>进入数据库————>web程序————>用户浏览器 这里给出一些防范XSS 攻击的措施.必须说明的是,对于XSS 攻击,并不像SQL Injection 那样可以有一劳永逸的解决方案——只需要grep 一下所有的sql

XSS攻击的解决方法

在我上一篇<前端安全之XSS攻击>文中,并没有把XSS攻击的解决办法说完整,而XSS的攻击又那么五花八门,有没有一招“独孤九剑”能够抗衡,毕竟那么多情况场景,开发人员无法一一照顾过来,而今天通过阅读<白帽子讲Web安全>这本书,对应对方式有了更好的总结,分为两类,一是服务端可以干的事,二是客户端可以干的事. 前提 在说XSS解决方式时,有一个前提.就是同源策略——浏览器的同源策略(浏览器安全的基础,即使是攻击脚本也要遵守这法则),限制了来自不同源的“document”或脚本,对当前

防止sql注入。xss攻击 方法

//防止sql注入.xss攻击    /**     * 过滤参数     * @param string $str 接受的参数     * @return string     */    public function actionFilterWords($str)    {        $farr = array(            "/<(\\)(script|i?frame|style|html|body|title|link|meta|object|\\?|\\%)([^

Web 安全漏洞之 XSS 攻击

什么是 XSS 攻击 XSS(Cross-Site Scripting)又称跨站脚本,XSS的重点不在于跨站点,而是在于脚本的执行.XSS是一种经常出现在 Web 应用程序中的计算机安全漏洞,是由于 Web 应用程序对用户的输入过滤不足而产生的. 常见的 XSS 攻击有三种:反射型.DOM-based 型.存储型. 其中反射型.DOM-based 型可以归类为非持久型 XSS 攻击,存储型归类为持久型 XSS 攻击. 1.反射型 反射型 XSS 一般是攻击者通过特定手法(如电子邮件),诱使用户去

XSS攻击原理及防御措施

概述 XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器 执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列 表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实 施比如SQL注入攻击服务器和数据库.Click劫持.相对链接劫持等实施钓鱼,它带来的危害是巨 大的,是web安全的头号大敌. 攻击的条件 实施XSS攻击需要具备两个条件: 一.需要向web页面注入恶意代码: 二.这些恶意代码能

(转)表单和HTML辅助方法 - ASP.NET MVC 3

——选自<ASP.NET MVC3 高级编程(第5章)  孙远帅 译> ——微软ASP.NET MVC系列书籍地址: http://www.wrox.com/WileyCDA/WroxTitle/Professional-ASP-NET-MVC-3.productCd-1118076583.html 第5章 表单和HTML辅助方法  本章内容简介: * 理解表单 * 如何利用HTML辅助方法 * 编辑和输入的辅助方法 * 显示和渲染的辅助方法 顾名思义,HTML辅助方法是用来辅助HTML开发的