美文网首页前端学习
针对xss的防御,必须遵循的准则

针对xss的防御,必须遵循的准则

作者: FFriday | 来源:发表于2019-09-27 11:18 被阅读0次

    针对xss的防御,必须遵循的准则就是:
    不要相信用户输入的任何东西,不要将用户输入的数据变为代码执行,从而混淆了原本的语意。
    要根治xss攻击。需要了解xss所在的不同的场景。

    xss过滤方式:
    1、在html标签中的输出
    <div>$var</div>
    在标签中直接输出,导致xss问题。
    防御的方法:对用户输入的变量使用htmlencode

    2、在html属性中的输出
    <div id="xxx" name="$var"></div>
    防御方法依然是使用htmlencode进行处理,不过更为保险的做法是:除了字母和数字之外,其他所有的特殊字符都编码为htmlentities。

    3、在<script>中的输出
    <script>
    var x="$var";
    <script>
    这个就必须进行符号的闭合,防御采用的是javascriptEncode。

    4、在事件中的输出
    和<script>中的输出类似:
    <a href=# onclick="funcA('$var')">test</a>
    防御采用javascriptEncode防止符号的闭合

    5、在css中的输出
    在css中的输出在xss中的利用中非常多元化,可通过@import(),url()引入外部css样式进行xss的攻击,可以利用expression进行xss的攻击。
    防御的话禁止用户可控制的遍历出现在<style>、css文件中。
    推荐使用owasp的encodeForCSS()函数进行加密,也就是除了字母和数字之外的特殊字符都编码成十六进制的形式

    6、在地址中的输出
    这种使用urlEncode即可,将特殊字符进行url编码转换。
    其中比较特殊的就是伪协议的url,例如javascript,dataurl,这种的话对url进行判断是否是http协议的url地址

    7、富文本的处理
    富文本的xss防御比较多样化,除了上述的一些,还应注意使用白名单标签,避免使用黑名单标签。

    8、dom型xss
    这个是比较特殊的xss攻击方式。
    防御的方法也比较特殊,在$var变量进入<script>时,应该先执行一次javascriptencode,在dom输出到html页面时候也需要区别对待,如果是输出到事件或者脚本中,则需要在做一次javascriptencode,如果是输出到html或者属性,则需要做一个htmlencode。

    减少xss危害的方法
    1、添加httponly属性
    2、系统后台增加ip访问限制,主要是针对获取cookie伪造管理员登入方式。

    相关文章

      网友评论

        本文标题:针对xss的防御,必须遵循的准则

        本文链接:https://www.haomeiwen.com/subject/qdwouctx.html