关于Web安全问题总结|青训营笔记

147 阅读3分钟

dtgh.PNG

这是我参与

「第四届青训营」笔记创作活动的第4天

web的安全可靠性是十分重要的,用户或内网信息是否容易被泄露,服务提供商能否正常运转,都与web的安全性有关,接下来从攻击和防御两个方面概况如何保护网站业务的安全。

进攻方

XSS[Cross-Site-Scripting]

在页面中攻击者能够通过脚本的注入实现攻击

漏洞产生原因:

开发者盲目信任用户提交的内容,将用户提交的字符串直接转换成DOM运行在HTML中

XSS攻击的特点

  • 难以在UI上被发现
  • 窃取用户信息(Cookies\token)
  • 绘制假表单诱骗用户输入

XSS攻击类型

  • Stored XSS(攻击脚本存放数据库,对所有用户可见,危害性最大)
  • Reflected XSS(附件在URL上进行攻击)
  • DOM-based XSS(完全运行在浏览器上)
  • Mutation-based XSS(按浏览器区别进行攻击)

CSRF[Cross-Site request forgery]

通过跳转链接,让目标接口被请求,进行不正常操作

特点

  • 需要用户对攻击不知情
  • 利用窃取的用户权限(cookie)
  • 构造HTTP请求,窃取或修改用户敏感信息

Injection

在请求中附带参数实现注入攻击,通常为SQL

攻击方式

  • CLI(终端)
  • OS command
  • Server-Side Request Forgery(SSRF)伪造请求

Denial of Services[DoS]

通过构造特定请求不断让服务器进行响应,导致服务器资源消耗过多造成拥挤

类型

  • ReDoS(基于正则表达式-贪婪匹配)
  • DDoS(Distributed DoS)

中间人攻击[传输层]

在浏览器和服务器之间插入,使浏览器和服务器误认为在相互发送请求,

可能发生原因

  • 内容使用明文传输
  • 无法察觉信息是否被篡改
  • 双方身份无法认证

防守方

针对XSS攻击

  • 永远不要相信用户提交的内容

  • 不要将用户提交的内容转换为DOM

工具

  • 主流框架默认防御XSS
  • google-closure-library
  • DOMpurify(Node)服务端

注意事项

  • 需要动态生成DOM,要对字符串进行转义,
  • 对用户上传的文件进行扫描
  • 不要让用户能自定义链接跳转,必要时做过滤操作
  • 不要让用户自定义样式

针对CSRF

  • 对异常来源请求进行限制
  • token标识(与具体用户绑定,设定过期时间)

image.png

  • 必须同源页面才能加载iframe
  • 不要将GET与POST混合
  • SameSite Cookie

image.png

针对Injection

  • 针对SQL语句使用prepared statement
  • 最小权限原则
  • 建立白名单
  • 拒绝类如rm命令的输入
  • 对URL类型参数进行协议、域名、ip等限制
  • 拒绝访问内网

针对DoS

  • 检查代码避免贪婪模式的正则表达式,类如接口处理
  • 使用工具对正则表达式的代码进行规整,并进行性能测试
  • 拒绝用户自定义正则表达式

  • 流量治理
    • 负载均衡
    • API网关
    • CDN
  • 快速扩容
  • 非核心服务降级

防御中间人

使用HTTPS

image.png

HTTP Strict-Transport-Security[HSTS] 将HTTP主动升级为HTTPS

image.png

PS

Content Security Policy[CSP]

同源:指协议、域名、端口相同

对于HTTP请求一般来说同源可行,跨域不可行

  • 哪些域名被认为是安全
  • 来自安全源的脚本可以执行,否则报错
  • 对eval和inline script直接报错

Feature Policy/Permission Policy

限制页面的使用功能

  • camera
  • microphone
  • autoplay

除去自己写的代码,使用的包依赖也可能成为被攻击的目标