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

74 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第4天。

安全问题是无处不在的,只要一个不小心,用户、公司和程序员都会受到危害。

一:如果是一个hacker—攻击

1.      xss:因为盲目信任用户的提交内容。利用一段伪代码进行攻击。攻击时是暗地里执行脚本的,难以感知,并窃取用户的信息,会诱骗用户点击表单。(程序员没有过滤的代码,很容易被攻击)

a)       Stored XSS:在访问页面读数据的时候,就会被攻击。

b)       reflected XSS 不涉及数据库,从URL上攻击(访问页面)。

c)        DOM-based XSS 不需要服务器的参与,恶意攻击的发起+执行,全在浏览器完成。(有恶意脚本)

d)       Mutation-based XSS 利用了浏览器渲染DOM的特性,不同浏览器,会有区别(按照浏览器进行攻击),最难防御的一种形式。

2.      CSRF:在用户不知情的前提下利用用户权限,构造指定HTTP请求,窃取或修改用户敏感信息。是跨站违章请求。

3.      injection:注入攻击使数据面临删除和修改的危害。Injction不止于SQL,虽然严格来说SSRF不是,但是基本的原理是一样的。容易暴露数据的地址。(写的重要文件的代码被暴露,就容易被修改)

4.      Dos:通过某种方式,导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而导致雪崩效应。正则表达式如果有贪婪模式,则容易被攻击。

5.      DDoS:短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求。(通过中间人进行攻击,因为代码是明文传输、信息篡改不可知、对方身份未验证)(例子:洪水攻击)

a)       攻击特点:直接访问IP,任意API,消耗大量带宽(耗尽)

 

二:如果是一个开发者—防御

1.      XSS:永远不要信任用户提交的内容,不要将用户递交内容直接转换成DOM。

a)       开发工具:前端:主流框架默认防御XSS。google-closure-library。服务端:DOMPurify

b)       如果非要生成DOM:将string转化成DOM,如果上传svg文件,需要将文件进行一次扫描,不要让自定义跳转,如果要跳转,则要使用过滤,注意一些细节。

c)        Same-origin Policy:要注意协议,域名和端口是否一致,在HTTP请求的时候同源是ok的,但是跨域的时候就要注意服务器的设置。

2.      CSP:那些源(域名)被认为是安全的,对来自安全源的脚本可以执行,否者直接抛错,对eval+inline script说不。

3.      CSRF:注意先有页面,后有请求,除了Origin+Referrer其他判断【请求来自于合法来源】的方式:if(请求来自合法页面)、then(服务器接收过页面请求)、then(服务器可以标识)。Token与具体用户进行保护,并且有期限。

a)       绕过iframe攻击:进行同源请求。

b)       Anti_pattern:不能将get弄成get+post。

c)        避免用户信息被携带:Same Site Cookie:限制的是Cookie domain和页面域名。

4.      Injection:找到项目中查询SQL的地方,使用prepared statement。要有最小权限原则,建立允许名单+过滤,对URL类型参数进行协议、域名、ip等限制。

5.      DOS:代码扫描+正则性能测试,不为用户提供的使用正则的权限。

6.      DDOS:流量治理,负载均衡、AIP官网、CDN快速自动扩容,非核心服务降级。

7.      HTTP的一些特性:可靠性:加密。完整性:MAC验证。不可抵赖性:数字签名。

 

 

安全看起来是一件小事情,但是也是非常值得我们去注意的事情,不能被忽视。

\