zoukankan      html  css  js  c++  java
  • 浅谈xss防御

    关于xss防御:

      XSS防御主要从两个方面入手,对用户输入的过滤,对内容输出的编码。

      1.用户输入的过滤:

      对提交的所有内容进行过滤,对url中的参数进行过滤,过滤掉会导致脚本执行的相关内容;然后对动态输出到页面的内容进行html编码,使脚本无法在浏览器中执行。虽然对输入过滤可以被绕过,但是也还是会拦截很大一部分的XSS攻击。

      主要的思路就是将容易导致XSS攻击的边角字符替换成全角字符。< 和 > 是脚本执行和各种html标签需要的,比如 <script>,& 和 # 以及 % 在对URL编码试图绕过XSS filter时,会出现。我们说对输入的过滤分为白名单和黑名单。黑名单就是列出不能出现的对象的清单,一旦出现就进行处理。还有一种白名单的过滤,白名单就是列出可被接受的内容,比如规定所有的输入只能是“大小写的26个英文字母和10个数字,还有-和_”,所有其他的输入都是非法的,会被抛弃掉。很显然如此严格的白名单是可以100%拦截所有的XSS攻击的。但是现实情况一般是不能进行如此严格的白名单过滤的。

      对于输入,处理使用XSS filter之外,对于每一个输入,在客户端和服务器端还要进行各种验证,验证是否合法字符,长度是否合法,格式是否正确。在客户端和服务端都要进行验证,因为客户端的验证很容易被绕过。其实这种验证也分为了黑名单和白名单。黑名单的验证就是不能出现某些字符,白名单的验证就是只能出现某些字符。尽量使用白名单。

      2.对输出进行编码:

      如果输出位置在script或者事件中,应该对输出的变量采用javascriptencode来过滤JavaScript代码。

      如果输出在html的内容或者属性中,应该对输出的变量采用htmlencode来避免用户插入新的标签。

        1> 作为body文本输出,作为html标签的属性输出:

        比如:<span>${username}</span>, <p><c:out value="${username}"></c:out></p>

        <input type="text" value="${username}" />

        此时的转义规则如下:

        < 转成 &lt;

        > 转成 &gt;

        & 转成 &amp;

        " 转成 &quot;

        ' 转成 &#39

        2> javascript事件

        <input type="button" onclick='go_to_url("${myUrl}");' />

        除了上面的那些转义之外,还要附加上下面的转义:

         转成 \

        / 转成 /

        ; 转成 ;(全角;)

        3> URL属性

        如果 <script>, <style>, <imt> 等标签的 src 和 href 属性值为动态内容,那么要确保这些url没有执行恶意连接。

        确保:href 和 src 的值必须以 http://开头,白名单方式;不能有10进制和16进制编码字符。

      3.设置cookie的httponly属性

      除了过滤输入输出以外,我们还可以对黑客经常从xss获取的cookie信息布局,将cookie设置httponly属性,dom文档对象就不会显示此cookie内容,但是不影响正常的浏览网页。对于设置了httponly的cookie,js是无法读取到的。对于敏感重要的cookie信息,可以使用这种方法防止黑客盗取,类似的方法还可以将cookie绑定ip,这样即使黑客得到了用户的cookie也无法使用。

  • 相关阅读:
    80%的程序员都不了解的调试技巧
    80%的程序员都不了解的调试技巧
    [SQL]死锁处理语句
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    2020年1月数据库流行度排行:从万里挑二到波澜不惊
    对项目中数据访问流程的理解
    set_global_opts使用说明
    对JNDI数据源的理解
  • 原文地址:https://www.cnblogs.com/zllovellyo/p/12593455.html
Copyright © 2011-2022 走看看