超链接 target="_blank" 要增加 rel="nofollow noopener noreferrer" 来堵住钓鱼安全漏洞。如果你在链接上使用 target="_blank" 属性,并且不加上 rel="noopener" 属性,那么你就让用户暴露在一个非常简单的钓鱼攻击之下。
跨站必跨域,跨域不一定跨站(比如端口不同) MDN
存储型 XSS 攻击:例如博客网站内,用户发表包含恶意脚本的推文,截断原字符串,则脚本每次被浏览都会直接被浏览器执行
反射型 XSS 攻击:是通过 URL 参数直接注入,一般是使用 alert 来探测站点是否防御,直接攻击的使用 src 来引入自己的脚本。
在github控制台输入await fetch('https://httpbin.org/get')
会被 CSP 阻止
外部域名的加载请求,包括脚本图片等等都可以被 CSP 拦截,是最好的防止 XSS 的方法
配置 CSP 后默认是禁止了内联脚本执行的
如果想要执行内联脚本(减少请求等等),可以配置script-src
为unsafe-inline
但是这样会重新有 XSS 的风险
所以需要使用 <script nonce=''/>
nonce 属性
CSP 响应头每次都生成并返回一个随机字符串,然后将内联脚本进行处理,给每个脚本加上 nonce 属性,这样页面内只有服务器返回的 script 可以执行
假网站通过恶意引导用户点击付款,因为携带了 支付宝(例子)cookie 所直接支付
类型
而现在有了 SameSite 属性,跨域请求会默认不携带 cookie,这样跨站必跨域,跨站请求伪造就失效了
如果在跨域情况下需要发送 Cookie
响应头需要配置access-control-allow-origin: <origin> Access-Control-Allow-Credentials:true
,fetch
请求需要配置credentials: include
如果需要跨站则配置 SameSite 为 None,再指定 Cookie 属性 Secure 在 HTTPS 下发送来保证安全
通过 iframe 嵌入支付宝到钓鱼网站中
通过响应头避免网站被 iframe 嵌入到其他网站