关于xss:XSSCross-Site-Scripting跨站脚本攻击
原理页面渲染的数据中蕴含可运行的脚本。 类型攻打的根底类型包含:反射型(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';">