今天是我参加青训营笔记创作活动的第9天
今天来讲Web开发的安全之旅,这篇文章从两个角度看Web安全
- 假如你是一个hacker--攻击
- 假如你是一个开发者--防御
攻击篇
XSS:在我们的一个开发维护的页面中,攻击者通过一种方式把他恶意脚本注入进来,当用户在使用这些页面的时候,这些恶意脚本就会被执行,进而完成攻击;造成的后果是用户隐私泄漏,也有可能用户的机器被当成一个挖矿的机器。XSS主要利用两个:
一,作为开发者过于相信用户提交上来的信息,二,作为前端工程师把用户提交的字符串转化成了DOM。
特点:通常难以从UI上感知;窃取用户信息;绘制UI(弹窗),诱惑用户点击/填写表单。
XSS有两大类;第一种存储型Stored XSS,这种攻击会被存到数据库当中,当用户访问页面的时候,就会涉及到数据,写数据给浏览器,只要完成这个链路,用户就会被攻击。这种存储型XSS是危害最大,对全部用户可见。
第二种是反射型攻击Reflected XSS Demo,这种类型不涉及到数据库,而是从URL上完成攻击。
当用户访问页面的时候,就会命中这种攻击。
第三种是DOM-baaaed XSS,不需要服务器的参与,恶意攻击的发起+执行,全在浏览器完成。
第四种是Mutation-bassed XSS,利用浏览器渲染DOM的特性,不同浏览器,会有区别。这是最难防御的一种攻击。
第五种是Cross-site request forgery(CSRF),在用户不知情的前提下,利用用户权限,构造指定HTTP请求,窃取或修改用户敏感信息。
第六种SQ Injection注入攻击:先是请求SQL参数(恶意注入)再是server参数-SQL运行SQL code,最后获取其他数据,修改数据,删除数据。
Injection不止于SQL
- CLI
- OScommand
- Server-side Request Forgery(SSRF),服务端伪造请求(严格来讲SSRF不是Injection,但是原理类似。
Denial of Sevice(DoS):
通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应。 正则表达式--贪婪模式;重复匹配时「?」VS「no?」:满足“一个”即可VS尽量多
ReDos:基于正表达式的DOS
贪婪:n次不行?n-1次再试一试?-回溯 Distributed DoS(DDOS) 通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而雪崩效应。
攻击特点:
- 直接访问IP
- 任意API
- 消耗大量带宽(耗尽)
防御篇
对于XSS:
永远不要相信用户提交内容,不要讲用户提交内容直接转换成DOM。
工具:
前端:主流框架默认防御XSS,goodle-closure-library
服务端(node):DOMPurify
但是对于必须生成DOM的,要注意;string生成DOM的,我们需要对string进行转译。以及用户上传的svg,我们需要对svg进行一次扫描。还有就是用户可以自定义样式的时候,我们需要对文件额外留意。
Content Security Policy(CSP)
- 哪些源(域名)被认为是安全的
- 来自安全源的脚本可以执行,否则直接抛错
- 对eval+inline script说不
Injection beyong SQL
最小权限原则-sudo||root 建立允许名单+过滤-rm 对URL类型参数进行协议、域名、IP等限制-访问内网
Regex Dos
- code Review
- 代码扫描+正则性能测试
- 拒绝用户提供的使用正则