这是我参与「第四届青训营 」笔记创作活动的的第1天!
Web开发的安全之旅
web安全职责:保护服务器及其数据的安全、保护服务器和用户之间传递的信息的安全、保护web应用客户端及其环境安全。
今天学习的课程概述了常见的web攻击方式和对应的防御方式,主要有XSS,DOS,CSRF,注入攻击等内容
1. XSS攻击
XSS又叫css,全称跨站脚本攻击,恶意攻击者往往向web页面里插入恶意JavaScript代码,当用户浏览该页面时,代码就会被执行,这种攻击往往隐藏于留言板,聊天室,搜索等处,隐秘地运行恶意代码以攻击用户。
1.1 反射型XSS
一般可以由攻击者构造带有恶意代码参数的 URL 来实现,在构造的URL 地址被打开后,其中包含的恶意代码参数被浏览器解析和执行。这种攻击不涉及数据库,且必须用户点击包含恶意代码参数的链接时才会触发。
1.2 储存型XSS
hacker将恶意代码存储到服务器的数据库中,每当用户访问服务器当中带有js代码的数据时,服务器将响应用户,返回给用户一个带有js代码页面,危害范围最大。
1.3 DOM型XSS
DOM型XSS的XSS代码并不需要服务器解析响应的直接参与,触发XSS靠的是浏览器端的DOM解析,攻击的全流程都在浏览器端。
1.4 Mutation型XSS
这种攻击利用了不同浏览器渲染DOM的特性,利用个别浏览器渲染的漏洞进行攻击。
1.5 防御XSS攻击
防御XSS的现成工具
若无法使用现成工具,应注意以下几点:
- 不要直接将用户内容转为动态DOM,而是用String形式。
- 当不得已需要使用到
new DOMOarse(),应该对string进行转义 - 当允许用户使用svg时,应对用户上传的svg进行扫描
- 不允许用户自定义跳转链接
- 允许用户自定义样式时也要格外小心
2. CSRF(Cross-site request forgery)(跨站伪造请求)
在用户不知情的情况下利用用户权限(比如cookie)进而制造指定HTTP请求,窃取和修改用户敏感信息
2.1 防御CSRF
- 限制请求来源
- 使用token验证:通过唯一的加密信息码与用户绑定,每次请求都需要将这个加密码随着请求发送到服务器,服务器解密比对信息后判断是否是用户本人操作
- 开发时使GET接口和POST接口分离
- SameSIte Cookie
3. SQL注入
SQL注入就是在人为可以构造参数的地方加入一些非法敏感语句,绕过后端的处理,并带入到数据库中执行,然后返回敏感数据的过程。
3.1 防御SQL注入
- 找到项目中SQL语句并使用prepared statement(提前编译)
4. DOS
攻击者通过某种方式(构造特定请求),使服务器资源被显著消耗,来不及相应更多请求,导致请求积压,进而导致雪崩效应。
DoS攻击分类
- ReDoS:利用正则表达式贪婪模式的DoS攻击
- Distributed DoS(DDos):使用大量僵尸设备进行请求,使服务器来不及响应全部请求。
- 中间人攻击
4.1 防御DOS攻击
4.1.1 ReDos
- 避免写出贪婪模式的正则表达式
- 进行代码扫描与正则性能测试
- 拒绝用户提供的正则
4.1.2 DDos
4.1.3 防御中间人
-
使用HTTPS
-
将HTTP主动升级到HTTPS(需要之前要有一次HTTPS访问)
-
静态资源被劫持可用SRI做hash验证
5. 个人总结
本次课程帮我系统梳理了一遍常见的Web攻防策略,填补了我Web安全方面的知识空缺,以后从未注意过安全问题的我也会在写代码时多多注意安全方面的优化,希望这篇文章可以对大家有所帮助!