目录

浏览器安全之XSS

目录

一、同源策略

  1. 同源策略是什么:
      同源策略是一个重要的安全策略,它用于限制来自不同源的"document"或脚本,对当前"document"的读取或设置某些属性。

  2. 是否同源的影响因素

    • 协议
    • host(IP或域名)
    • 子域名
    • 端口
  3. 不受同源策略影响的标签
      这些带“src”属性的标签加载资源时,是由浏览器来发起GET请求获取资源。与XMLHttpRequest不同的是,加载的资源,浏览器限制了JavaScript的权限,使其不能读、写返回的内容

    • <script>
    • <img>
    • <iframe>
    • <link>
    • …

二、XSS

  1. XSS是什么?   XSS(Cross Site Script)攻击全称是跨站脚本攻击,通常指通过“HTML注入”插入恶意代码篡改网页,从而在用户浏览网页时,控制用户浏览器的一种攻击。

  2. XSS分类

    • 反射性XSS
      • 非持久化,恶意代码不存储在服务器中的,需要诱骗用户自己去点击链接才能触发XSS代码。
      • 典例:发你个链接诱骗你点击
    • 存储性XSS
      • 持久化,恶意代码是存储在服务器中的,用户访问该页面的时候就会触发代码执行。
      • 典例:留言板恶意代码
    • DOM Based XSS
      • 不通过恶意代码是否存储在服务器来区分,指的是通过修改页面的DOM节点形成的XSS
      • 利用方式:.innerHTML修改DOM来插入链接或者闭合标签构建新链接
  3. XSS危害

    • Cookie劫持
    • 直接模拟用户身份发起GET、POST请求完成恶意操作,如删除用户的文章
    • XSS钓鱼,用js伪造登录框
    • XSS蠕虫(XSS Worm)
  4. XSS防御

    • 给Cookie设置HttpOnly,这样JS就不能获取设置了HttpOnly的Cookie。
    • 输入检查:XSS Filter(检查使用字符域、输入格式规范、是否包含敏感字符)
    • 输出检查:使用编码或者转义来防止恶意代码被当做脚本执行。
      • 在HTML标签中输出:使用HtmlEncode
      • 在HTML属性中输出:使用严格HtmlEncode,除字母数字外,所有字符都编码成HTMLEntities
      • 在<script>标签中输出:使用JavaScriptEncode
      • 在事件中输出:OnClick等,使用JavaScriptEncode
      • 在CSS中输出:EncoderForCSS()类似的CSS编码方法
      • 在地址中输出:URLEncode()、检验是否http开头防止通过伪协议调用js
      • 处理富文本:只允许a、img、div等比较安全地带标签,Anti-Samy开源富文本XSS检测项目
    • DOM Based XSS
      • js输出到页面必经之路(重点关注这些地方的参数输出,采用编码预防XSS)
        • document.write()
        • document.writeln()
        • xxx.innerHTML=
        • xxx.outerHTML=
        • innerHTML.replace()
        • document.attachEvent()
        • window.attachEvent()
        • document.location.replace()
        • document.location.assign()
        • …
      • 常见输入点
        • 页面中所有的imputs框
        • window.location(href、hash)
        • window.name
        • document.referrer
        • document.cookie
        • localstorage
        • XMLHttpRequest返回的数据
        • …
      • http://code.google.com/p/domxsswiki
    • 对于涉及用户交互的地方,容易被XSS Worm攻击

三、XSS攻击之HttpOnly绕过

  • XSS防御绕过(大小写替换为空等绕过):http://www.360doc.com/content/20/0603/09/68828020_916193044.shtml
  • XSS攻击之HttpOnly绕过:https://blog.csdn.net/weixin_42478365/article/details/116597222
  • HttpOnly钓鱼绕过:http://www.360doc.com/content/20/0614/14/68828020_918413632.shtml

四、区别

  • 存储型XSS:你发送一次带XSS代码的请求,以后这个页面的返回包里都会有XSS代码
  • 反射型XSS:你发送一次带XSS代码的请求,只能在当前返回的数据包中发现XSS代码
  • DOM型XSS:你发送一次带XSS代码的请求,在返回包里压根儿就找不到XSS代码的影子; 作者:上面有竹 链接:https://www.zhihu.com/question/26628342/answer/140795922

前端网络安全(一):XSS:https://zhuanlan.zhihu.com/p/604601101

← 返回技术