Web开发安全 | 青训营笔记

82 阅读3分钟

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

1、XSS攻击

跨站脚本攻击指得是:恶意攻击者往Web页面里注入恶意Script代码,用户浏览这些网页时,就会执行其中的恶意代码,可对用户进行盗取cookie信息、会话劫持等各种攻击。

主要利用了盲目信任用户提交的内容

特点

  • 通常难以从UI上感知(暗地执行脚本)
  • 窃取用户信息(cookie/token)
  • 绘制UI(例如弹窗),诱骗用户点击/填写表单

分类:

  • 存储型XSS攻击,恶意脚本被存在数据库中
  • 反射型XSS攻击,在服务端进行注入
  • DOM型XSS攻击,在浏览器侧注入
  • Mutation型XSS攻击,利用浏览器渲染机制

这种攻击不涉及数据库,单从url上进行攻击

防御:

永远不要相信用户提交的内容,永远不要将用户提交的内容作为DOM。

前端:

  • 主流框架默认防御XSS(innerHTML)
  • google-closure-library

服务端:

  • DOMPurify

如果用户有必须上传DOM的需求,可以使用new DOMParser(),对于用户上传的svg,也要对其中内容进行检查(其中可以插入script标签),小心自定义跳转和自定义样式。

2、CSRF 跨站伪造请求

特点

  • 在用户不知情的前提下
  • 利用用户权限(cookie)
  • 构造指定HTTP请求,窃取或修改用户敏感信息

举例:用户没有访问银行页面,但银行的服务器被请求了。

防御

核心:判断请求来自合法来源。

方案一:对请求同步的Origin、Refer进行校验。

方案二:token。

3.injection 注入攻击

最常见的是SQL注入攻击。也有CLI注入,OS command等。

防御

  • SQL注入:找到使用SQL的地方,使用prepared statement
  • 最小权限原则:sudo||root
  • 建立允许名单+过滤
  • 对URL类型参数进行协议、域名、ip等限制

4.DoS

通过某种方式构造特定请求,导致服务器资源被显著消耗,来不及响应更多的请求,导致请求被挤压,进而雪崩效应。

ReDoS:基于正则表达式的DoS。

DDoS:短时间内来自大量僵尸设备的请求。(SYN Flood)

防御

5.Dos

  • ReDos:完善Code Review
  • 代码扫描 + 正则性能测试
  • 拒绝使用用户提供的正则

6.中间人攻击

可以由恶意webview,路由器,ISP等在传输层进行攻击。

发生原因:

  • 明文传输
  • 信息篡改不可知
  • 双方未进行验证

防御

HTTPS:

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

防御: csp策略

内容安全策略:

  • 规定呗认为是安全的源(域名)
  • 来自安全源的脚本可以执行,否则直接报错
  • 减少对evalinline script的使用。

服务器设置响应头部,浏览器设置meta标签。

原理其实就是白名单机制,开发者明确告诉浏览器哪些资源可以加载并执行,我们只需要提供配置,其他的工作由浏览器来完成。通过 < meta > 标签开启