这是我参与「第四届青训营 」笔记创作活动的第8天
Web开发安全-防御篇
面对网络上的一些攻击,我们需要做出一些应对的措施来防止一些恶意代码,为企业、用户带来安全的网络环境。
防御XSS
我们从XSS的特点来说,他是通过用户提交的内容注入恶意代码进行攻击的,而我们却将用户提交的内容数据直 接挂载在DOM上。
所以,我们应该怎么防御XSS呢?
- 不要信任用户提交的内容和数据
- 不要将用户提交的内容直接转换成DOM
- 我们应该先把用户提交的数据内容使用string承载
- 使用现成工具:
前端:
-一般主流的框架会默认防御XSS
-谷歌的google-closure-library
服务端:
- node中有DOMPurify可以防御XSS
Content Scurtiy Policy (CSP)防御
根据CSP的特点,我们应该怎么防御呢?、
- 判断哪些域名被认为是安全的
- 来自安全原得脚本可以执行,否则直接抛出错误
- 对eval+inline script说no
举例:
- 服务器的响应头部
//服务器的响应头部
Content-Security-Policy:script-src 'self' //同源
Content-Securty-Policy:script-src 'self' http://baidu.com //除了同源外,还可以添加外部链接(白名单)
- 浏览器meta
<meta http-equiv="Content-Security-Policy" content="script-src self">
CSRF的防御
如果黑客申请了一个伪造请求,然后后台检测到异常来源,然后我们限制请求来源来限制伪造请求。
请求头部:
- Origin
- 同源请求中,GET+HEAD不发送
- Referer
CSRF---token
除了Origin+Referer,还可以使用其他判断请求来自合法来源的方式。
- 先有页面,后有请求:
if(请求来自合法页面)
then(服务器接受过页面请求)
then(服务器可以标识)
我们通过url请求页面到服务器,服务器就发送页面+token发送到浏览器,浏览器向服务器请求API+token,服务器验证token+数据传到浏览器。服务器判断token OK不OK。
- 用户绑定:攻击者也可以是注册用户===可以获取自己的token
- 过期时间:前向保密(token需要有过期时间)