zoukankan      html  css  js  c++  java
  • 富文本XSS防御



    XSS的一般防御

    一般转义掉所有尖括号 < > to &lt; &gt; 和双引号 " " to &quot; &quot; 即可。

    优点是成本比较低,且一劳永逸。

    缺点是部分情况可能会出现转义字符未渲染的情况,比如浏览就直接显示 &lt;

    根据可在三个环节转义:

    1. 后端接收前端提交的数据后,在数据存入数据库前转义,缺点是可能会污染数据库中的数据,如果数据库还要放到其他地方用的话,读出还要转义回去

    2. 后端接受前端请求后,将数据库的数据转义后输出给前端,缺点是每次请求都需要转义会增加服务器一点负担,当然如果网站没有前后端分离那不用考虑此问题

    3. 对于前后端分离的网站,前端拿到后端数据后,转义再填充进页面中

    如果不想转义后入库,需要注意一些输入框会重复转义,比如新增一个内容,其中含有 <>"" ,当用户再修改时,textarea中已经填充了上次输入的内容,其中的 <>"" 已经被转义,当用户追加一些内容提交后,<>"" 仍以开发者不愿看到的转义的形式入库了。



    富文本的XSS防御

    一些需要提交富文本的功能,比如邮件、公告内容,需要用到html标签;再比如一些流程、作业的设计,可能要以xml格式来保存。这种情况下上述转义的方法就不适用了。

    这时就必须识别出XSS攻击代码了,识别出来有两种处理方法,一是拦截,直接 403 Forbidden;二是过滤,一般是删掉或者替换然后存入数据库。

    不推荐过滤处理,容易被绕过。

    这里简述一下识别XSS攻击的逻辑:

    • 禁止一些危险的标签,比如 script 、 object。标签名和<间必须无其他字符,标签只能大小写不能进行其他编码

    • 禁止所有事件属性,比如 onerror 、 onmouseover,这里难以搜寻全面的 event list,最好是禁止 on 开头属性。属性只能大小写

    • 对于 src、href 中的链接,检验其中是否有关键字 javascript:javascript:字母中可以穿插其他编码的ascii控制字符,但是本身字母不可以编码,后面的js代码的字母才能编码

    • 特别地,说一下 iframe、embed 等嵌套的页面,似乎是安全的,比如iframe中的 alert(document.cookie),是没法读取宿主页面的cookie的

      不然 <iframe src="http://"> 谁敢用



    特殊情况

    如果遇到一些特殊的功能,比如Web应用分前台和管理台,管理台可以配置前台的页面,比如页眉页脚等,就是需要js。

    管理台控制前台的js,个人认为是没问题的,管理台可以有这个权限。

    但管理台这个地方如果是富文本的,可查看效果,就有安全隐患了。 可以用 input 或 textarea 输入,相对安全一点。

    最安全的做法就是运维的事,不要放到线上进行,直接上服务器上操作。

  • 相关阅读:
    js实现单张或多张图片持续无缝滚动
    h5 video标签在ios8,9无法设置静音
    使用async await通过for循环在图片onload加载成功后获取成功的图片地址
    div元素下的图片不能置顶解决办法
    setInerval实现图片滚动离开页面后又返回页面时图片加速滚动问题解决
    纯css实现单张图片无限循环无缝滚动
    nodejs的xlsx模块批量解析与导出excel数据表简单使用
    js获取文件后缀名方法
    nodejs对字符串进行base64转换和解析
    js中如果遇到低版本安卓设备调用setTimeout不生效解决办法
  • 原文地址:https://www.cnblogs.com/yunmuq/p/14982202.html
Copyright © 2011-2022 走看看