Web安全之道 | 青训营笔记

81 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第17天

Web安全之道

Web安全一窥

根据 HackerOne 的报告数据,71% 的安全问题都出现在网站上,其次是一些 API 接口,而这些接口很大一部分都来自 Web 。

可以说,网站安全攻防(我们俗称 Web 安全),占比通常达到了 80%以上。Web 安全是最受外部黑客关注的目标,也是企业应该重点防御的对象。

不论你是后端还是前端,都应该意识到 Web 安全与整个开发团队成员都有关,当不可逆的安全问题发生时,只有熟悉安全攻防技术,才有化危为安的可能。

安全问题其实“很常见”,对于用户、公司以及程序员都有很大影响。

两个角度看Web安全

攻击篇(As Hacker)

Cross-Site Scripting(XSS)

跨域脚本攻击,当用户访问页面时恶意脚本会被执行

XSS主要利用了:盲目信任用户提交的内容+直接将字符串转换为DOM

特点:

  • 通常难以从UI上感知(暗地里执行脚本)
  • 窃取用户信息(cookie/token)
  • 绘制UI(弹窗等),诱骗用户去填写提交

分类:

  • Stored XSS:恶意脚本被存在数据库中
  • Reflected XSS:不涉及数据库,从URL上攻击
  • DOM-based XSS:不需要服务器参与,全在浏览器完成
  • Mutation XSS:利用不同浏览器渲染DOM的特性,按浏览器进行攻击

Cross-Site request forgery(CSRF)

跨域伪造请求, 在用户不知情下,构造用户权限(cookie),构造指定HTTP请求,窃取或修改用户信息

image.png

SQL Injection

SQL注入,在请求是恶意注入SQL参数,服务端运行该SQL code,达到获取、修改或删除其他数据目的。

Injection不止SQL:

  • CLI
  • OS command
  • Server-Side Request Forgery(SSRF)

Denial of Service(DoS)

服务拒绝,通过某种方式构造特定请求,导致服务器资源被显著消耗,无法响应更多请求,导致雪崩效应。

  • ReDoS:基于正则表达式的DoS,向贪婪模式的正则传入容易发生回溯行为的字符串。

  • DDos(Distributed DoS):短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求。

特点:

不会局限于域名和接口,主要消耗带宽

image.png

中间人攻击

image.png

主要利用了:明文传输+信息篡改不可知+对方身份未验证

防御篇(As Developer)

针对XSS

永远不要相信用户提交的任何内容,不要将用户提交内容直接转换成DOM

现成工具:

  • 主流前端框架默认防御XSS
  • google-closure-library
  • DOMPurify

注意:(以下操作有被XSS攻击的风险)

  • string—>DOM
  • 上传svg
  • Blob动态生成script
  • 自定义样式

Content Security Policy(CSP)

内容安全策略,可以去定义那些源(域名)是安全的,对来自安全源的脚本是可以执行的,对eval+inline script说不。

//服务器响应头
Content-Security-Policy: script-src 'self'
Content-Security-Policy: script-src 'self' https://domain.com

//浏览器
<meta http-equiv="Content-Security-Policy" content="script-src self">

针对CSRF

根据请求的OriginReferer判断请求来源,同源请求中,GET和HEAD不发送Origin

利用token进行防御:用户绑定+过期时间

image.png

iframe攻击:

攻击者可以采在iframe标签中嵌套button,进行同源请求,从而完成一次CSRF攻击。

image.png

SameSite Cookie—避免用户信息被携带

image.png

针对Injection

找到项目中SQL的地方,使用prepared statement提前编译语句

  • 最小权限,不要使用sudo或root
  • 建立白名单+过滤,将rm等高危命令排除
  • 对URL类型参数进行协议、域名、ip等限制

针对RDoS

  • Code Review拒绝贪婪模式的正则
  • 代码扫描+正则性能测试
  • 拒绝用户提供的实验正则

针对DDoS

  • 流量治理(负载均衡、API网关、CDN)——过滤
  • 快速自动扩容 ——抗量
  • 非核心业务功能降级(关闭)——抗量

防御中间人——HTTPS

  • 可靠性:加密传输
  • 完整性:MAC验证
  • 不可抵赖性:数字签名

Subresource Integrity(SRI)

对比标签hash值,判定CDN静态资源是否被攻击者篡改。