就是攻击者想尽一切办法将可以执行的代码注入到网页中。
场景:见于带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等。
攻击步骤:
- iv)恶意代码窃取用户数据,并发送到指定攻击者的网站,或者冒充用户行为,调用目标网站的接口,执行恶意操作
与存储型的区别在于,存储型的恶意代码存储在数据库中,反射型的恶意代码在URL上
场景:通过 URL 传递参数的功能,如网站搜索、跳转等。
攻击步骤:
DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞。
场景:通过 URL 传递参数的功能,如网站搜索、跳转等。
攻击步骤:
- i)攻击者构造出特殊的 URL,其中包含恶意代码。
- ii)用户打开带有恶意代码的 URL。
- iii)用户浏览器接收到响应后解析执行,前端 JavaScript 取出 URL 中的恶意代码并执行。
- iv)恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。
i)对数据进行严格的输出编码:如HTML元素的编码,JS编码,CSS编码,URL编码等等
ii)CSP HTTP Header,即 Content-Security-Policy、X-XSS-Protection
- 增加攻击难度,配置CSP(本质是建立白名单,由浏览器进行拦截)
- `Content-Security-Policy: default-src 'self' `-所有内容均来自站点的同一个源(不包括其子域名)
- `Content-Security-Policy: default-src 'self' *.trusted.com`-允许内容来自信任的域名及其子域名 (域名不必须与CSP设置所在的域名相同)
- `Content-Security-Policy: default-src https://yideng.com`-该服务器仅允许通过HTTPS方式并仅从yideng.com域名来访问文档
iii)输入验证:比如一些常见的数字、URL、电话号码、邮箱地址等等做校验判断
iv)开启浏览器XSS防御:Http Only cookie,禁止 JavaScript 读取某些敏感 Cookie,攻击者完成 XSS 注入后也无法窃取此 Cookie。
v)验证码
攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
CSRF通常从第三方网站发起,被攻击的网站无法防止攻击发生,只能通过增强自己网站针对CSRF的防护能力来提升安全性。)
i)同源检测:通过Header中的Origin Header 、Referer Header 确定,但不同浏览器可能会有不一样的实现,不能完全保证
ii)CSRF Token 校验:将CSRF Token输出到页面中(通常保存在Session中),页面提交的请求携带这个Token,服务器验证Token是否 正确
iii)双重cookie验证:
流程:
优点:
- 缺点: -Cookie中增加了额外的字段。 -如果有其他漏洞(例如XSS),攻击者可以注入Cookie,那么该防御方式失效。 -难以做到子域名的隔离。 -为了确保Cookie传输安全,采用这种防御方式的最好确保用整站HTTPS的方式,如果还没切HTTPS的使用这种方式也会有风险。
i)嵌入第三方 iframe 会有很多不可控的问题,同时当第三方 iframe 出现问题或是被劫持之后,也会诱发安全性问题
ii)点击劫持
iii)禁止自己的 iframe 中的链接外部网站的JS
i)为 iframe 设置 sandbox 属性,通过它可以对iframe的行为进行各种限制,充分实现“最小权限“原则
ii)服务端设置 X-Frame-Options Header头,拒绝页面被嵌套,X-Frame-Options 是HTTP 响应头中用来告诉浏览器一个页面是否可以嵌入
X-Frame-Options: SAMEORIGINiii)设置 CSP 即 Content-Security-Policy 请求头
iv)减少对 iframe 的使用
文件上传类型校验失败后,导致恶意的JS文件上传后,浏览器 Content-Type Header 的默认解析为可执行的 JS 文件
设置 X-Content-Type-Options 头
减少对第三方依赖包的使用,如之前 npm 的包如:event-stream 被爆出恶意攻击数字货币;
黑客可以利用SSL Stripping这种攻击手段,强制让HTTPS降级回HTTP,从而继续进行中间人攻击。
使用HSTS(HTTP Strict Transport Security),它通过下面这个HTTP Header以及一个预加载的清单,来告知浏览器和网站进行通信的时候强制性的使用HTTPS,而不是通过明文的HTTP进行通信。这里的“强制性”表现为浏览器无论在何种情况下都直接向务器端发起HTTPS请求,而不再像以往那样从HTTP跳转到HTTPS。另外,当遇到证书或者链接不安全的时候,则首先警告用户,并且不再 用户选择是否继续进行不安全的通信。
避免重要的用户信息存在浏览器缓存中
使用 内容分发网络 (CDNs) 在多个站点之间共享脚本和样式表等文件可以提高站点性能并节省带宽。然而,使用CDN也存在风险,如果攻击者获得对 CDN 的控制权,则可以将任意恶意内容注入到 CDN 上的文件中 (或完全替换掉文件),因此可能潜在地攻击所有从该 CDN 获取文件的站点。
将使用 base64 编码过后的文件哈希值写入你所引用的
全站 HTTPS
中间人攻击(Man-in-the-middle attack, MITM),指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者窃听、篡改甚至完全控制。没有进行严格的证书校验是中间人攻击着手点。目前大多数加密协议都提供了一些特殊认证方法以阻止中间人攻击。如 SSL (安全套接字层)协议可以验证参与通讯的用户的证书是否有权威、受信任的数字证书认证机构颁发,并且能执行双向身份认证。攻击场景如用户在一个未加密的 WiFi下访问网站。在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容。
就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗数据库服务器执行恶意的SQL命令,从而达到和服务器 进行直接的交互
反爬虫。如猫眼电影、天眼查等等,以数据内容为核心资产的企业