关于xss:XSSCross-Site-Scripting跨站脚本攻击

54次阅读

共计 1118 个字符,预计需要花费 3 分钟才能阅读完成。

原理

页面渲染的数据中蕴含可运行的脚本。

类型

攻打的根底类型包含:反射型(url 参数间接注入)和存储型(存储到 DB 后读取时注入)。

注入点

HTML 节点内容注入

el.innerHTML = "<script>alert(1);<\/script>";

下面的代码不会失效,如果你在浏览器控制台运行就会看见:

'\x3Cscript>alert(1);\x3C/script>'

应该是对 script 这种非凡的标签进行了本义。

诱惑用户触发

el.innerHTML = "<button onclick='alert(1)'> 点击我 </button>";

和很多办法相似,如果用户被动触发一次,就能够了(有些操作须要被动用户触发,不然没有权限)。

DOM 属性注入

比方,在加载图片失败的时候,会调用该元素上的 onerror 事件,那么咱们就能够利用图片加载失败的回调触发:

el.innerHTML = "<img src='/images-404.png'onerror='alert(\"图片加载失败,该我触发了~\");'>";

进攻

X-XSS-Protection

浏览器自带防御机制,当初支流浏览器都反对,并且默认都开启了 XSS 爱护,用这个 header 能够敞开它。它有几种配置:

  • 0:禁用 XSS 爱护;
  • 1:启用 XSS 爱护;
  • 1:mode=block:启用 XSS 爱护,并在查看到 XSS 攻打时,进行渲染页面(例如 IE8 中,查看到攻打时,整个页面会被一个 #替换)。

    对特定字符做本义

    比方如果须要 innerHTML 的模板中蕴含 script 等敏感标签,就把标签本义。

内容安全策略

也就是 CSP(Content Security Policy),用于指定哪些内容可执行。

咱们能够在 http 响应头中设置 Content-Security-Policy,比方,咱们有如下的需要:

  • 图片能够从任何中央加载 (留神 “*” 通配符)
  • 多媒体文件仅容许从 media1.com 和 media2.com 加载 (不容许从这些站点的子域名)
  • 可运行脚本仅容许来自于 userscripts.example.com
    如此就能够这样设置:

    Content-Security-Policy: default-src 'self'; img-src *; media-src media1.com media2.com; script-src userscripts.example.com

    同时 meta 中也反对设置 Content-Security-Policy:

    <meta http-equiv="Content-Security-Policy" content="default-src'self'; img-src https://*; child-src'none';">

正文完
 0