Web开发的安全之旅|青训营笔记

47 阅读3分钟

这是我参与[第四届青训营]笔记创作活动的第5天。此笔记用于记录课上所讲内容。

一、Web安全一窥

安全问题很常见,会危害用户、公司、程序员

二、两个角度看web安全

1、假如你是一个hacker——攻击

①、XSS跨站脚本攻击:可能会造成用户隐私泄露

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

特点:通常难以从UI上感知,窃取用户信息(cookie/token)、绘制UI,诱骗用户点击

分类:

Stored XSS:恶意脚本被存在数据库中;访问页面-》读数据==被攻击;危害最大,对全部用户可见

Reflected:不涉及数据库,从URL方面攻击

DOM-based XSS:不需要服务器的参与;恶意攻击的发起+执行,全在浏览器完成

Mutation-based XSS:利用了浏览器渲染DOM的特性(独特优化);不同浏览器,会有区别(按浏览器进行攻击)

②Cross-site request forgery(跨站伪造请求):在用户不知情的情况下,利用用户权限(cookie),构造指定HTTP请求,窃取或修改用户敏感信息

③SQL Injection

具体流程:SQL参数恶意注入请求,请求到达服务器端后,从HTTP请求中读参数形成SQL语句,运行SQL语句后导致攻击者获取了数据,可对数据进行恶意操作

Injection不止于SQL,还有CLI,OS command,Server-Side Request Forgery(SSRF),严格来讲,SSRF不是injection,但原理类似

Denial of Service(DoS):通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及相应更多请求,导致请求挤压,进而雪崩效应

Distributed DoS(DDoS):短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求\

攻击特点:直接访问IP,任意API,消耗带宽

基于传输层的攻击:

中间人攻击利用明文传输,信息篡改不可知,对方身份未验证进行攻击。

2、假如你是一个开发者——防御

针对XSS攻击:永远不信任用户提交的内容,不要讲用户提交的内容直接转成DOM

现成工具:前端:主流框架默认防御XSS,Google-closure-library

服务端:DOMPurify

如果用户需求必须动态生成DOM,那就要求上传svg,尽量不要让用户自定义跳转链接,自定义样式

Same-origin Policy(同源策略):协议,域名,端口号全部一致则称为同源

Content Security Policy(CSP):哪些源被认为是安全的,来自安全源的脚本可以执行,否则直接抛错;对eval+inline script禁止

CSRF的防御:

CRSF防御.png

其他判断请求安全的方式:

CSRFtoken.png CSRF的iframe攻击:

CSRFiframe攻击.png CRSF的anti-pattern:

CSRFanti-pattern.png 避免用户信息被携带:SameSite Cookie

SameSite Cookie.png

SameSite和CORS的比较:

SameSite VS CORS.png 注入相关的防御:找到项目中查询SQL的地方,使用prepared statement

Injection beyond SQL:最小权限原则,建立允许名单+过滤,对URL类型参数进行协议、域名、IP的等限制

DOS防御:正则表达式防御,代码扫描+正则性能测试、禁止使用用户提供的正则

DDoS防御:

DDoS防御.png

传输层的防御中间人:使用HTTP

HTTPS的一些特点:可靠性:加密;完整性:MAC验证;不可抵赖性:数字签名