XSS漏洞原理

XSS全称:跨站脚本(Cross Site Scripting)

攻击者会向web页面(input表单、URL、留言版等位置)插入恶意JavaScript代码,导致管理员/用户访问时触发,从而达到攻击者的目的。

主要原因还是服务器对用户提交的数据过滤不严,导致浏览器把用户的输入当成了JS代码并直接返回给客户端执行,从而实现对客户端的攻击目的。

事实上该漏洞在实战中还是需要搭配其他攻击手段来使用,单独利用XSS漏洞可能只能获取用户的Cookie资料

漏洞类型

XSS类型 存储型 反射型 DOM型
触发过程 1. 黑客构造XSS脚本
2. 正常用户访问携带XSS脚本的页面
正常用户访问携带XSS脚本的URL 正常用户访问携带XSS脚本的URL
数据存储 数据库 URL URL
谁来输出 后端Web应用程序 后端Web应用程序 前端JavaScript
输出位置 HTTP响应中 HTTP响应中 动态构造的DOM节点
是否持久

漏洞防御

  1. 对输入和URL参数进行过滤(白名单和黑名单)
    检查用户输入的数据中是否包含一些特殊字符,如<、>、’、“等,发现存在特殊字符,将这些特殊字符过滤或者编码。

  2. HTML实体编码
    字符串js编码转换成实体html编码的方法(防范XSS攻击)
    https://www.cnblogs.com/dearxinli/p/5466286.html

  3. 对输出内容进行编码
    在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击。

  4. 消除危险插点

    应尽量避免直接在现有的JavaScript中插入用户可控的数据;

    如果标签属性接受URL作为它的值,应避免嵌入用户的输入;

  5. 设置set-cookie为httponly或secure