这是我参与「第四届青训营 」笔记创作活动的的第六天!
Web开发的安全之旅行(基础原理篇)
1.web安全
web安全职责:保护服务器及其数据的安全、保护服务器和用户之间传递的信息的安全、保护web应用客户端及其环境安全。
Web安全主要有如下几大分类
- XSS
- CSRF(跨站请求伪造)
- SQL注入
- 命令行注入
- DDos注入
- 流量劫持
2.XSS(跨站脚本攻击)
XSS原理:它是指攻击者往web页面或url里插入恶意JavaScript脚本代码且应用程序对用户输入的内容没有过滤,那么当正常用户浏览该页面时,嵌入在web页面的恶意JavaScript脚本代码会被执行,从而达到恶意攻击正常用户的目的。如下图:
产生漏洞的两个条件:
- 盲目信任用户的提交内容。
- 把用户提交的内容转换为DOM并解析。
XSS的特点:
- 通常难以从UI上感知(暗地执行脚本)
- 窃取用户信息(cookie/token)
- 绘制UI(例如弹窗),诱骗用户点击/填写表单
XSS攻击例子如下图:
XSS的分类:
- 反射型XSS:它是非持久型,参数型的跨站脚本。
- 存储型XSS:它是将脚本代码写进数据库可以永久保存数据,危害最大。
- DOM型XSS:与反射性相似,但是DOM是树形结构,利用DOM标签。
2.1-反射型XSS
反射型XSS原理:攻击者通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行,从而达到攻击目的(获取用户信息,侵犯隐私)
反射型XSS特点:
- 不涉及数据库
- 从URL上攻击
解决方法:
- Web页面渲染所有内容或渲染的数据必须来源于服务器
- 不要从 URL,document.referrer,document.forms 等这种 DOM API 中获取数据直接渲染
- 尽量不要使用 eval, new Function(),document.write(),document.writeln(),window.setInterval()window.setTimeout(),innerHTML,document.creteElement() 等可执行字符串的方法
原文链接:blog.csdn.net/qq_33551792…
2.2-存储型XSS
存储型XSS原理:一般存在与form提交表单之中,如留言,提交文本。攻击者利用XSS漏洞,将脚本内容经过正常功能提交进入数据库永久保存,当前端获得后端从数据库中读出的注入代码时,将其渲染执行
存储型XSS特点:
-
恶意脚本被存储在数据库中
-
访问页面->读数据==被攻击
-
危害最大,对全部用户可见
漏洞产生原因: POST请求提交表单没有经过转义直接入库 后端从数据库取出数据没有转义直接输出给前端 前端拿到后端数据后没有经过转义直接渲染
解决方法:
- 后端入库前不要相信前端任何数据,统一将所有字符转义
- 后端将数据输出给前段时统一进行转义
- 前端进行渲染时,将从后端请求过来的数据统一转义处理
2.3-DOM型XSS
DOM型XSS原理:大部分浏览器都专门针对XSS进行转义处理,但也有很多方式可以绕过转义规则,比如web页面字符集不固定,用户输入非字符集字符,有时会绕过转义过滤规则。
存储型XSS特点:
- 不需要服务器的参与
- 恶意攻击的发起+执行,全在浏览器完成
解决方法:
- 指定 ,用utf-8,而且标签闭合
3.CSRF
Cross-site request forgery(CSRF)原理: 用户登录了某网站A,并在本地记录了cookie,在没有退出该网站时(cookie有效的时间内),攻击者发送引诱网站B,B要求访问A,从而达到获取用户隐私。
CSRF特点:
- 在用户不知情的前提下
- 利用用户权限
- 构造指定HTTP请求,窃取或修改用户敏感信息
解决方法:
- 正确使用get(只用于查看,列举,展示等不需要改变资源属性的时候) post(用于form表单提交,改变一个资源的属性或做一些其他事情,如数据库增删改)和cookie
- 非GET请求中,为每个用户生产一个cookie token
- POST请求的时候使用验证码
- 渲染表单的时候,为每个表单加一个 csrfToken,然后在后端做 csrfToken验证
- 校验请求来源
- 设置cookie samesite
原文链接:blog.csdn.net/qq_33551792…
CSRF例子(如下图):
4.SQL注入和命令行注入
SQL注入原理:程序没有有效的转义过滤用户的输入,使得攻击者成功向服务器提交恶意的SQL查询代码,使得程序将攻击者的输入作为查询语句一部分执行。
预防方法:
- 严格限制web应用的数据库操作权限,给此用户提供仅仅能够满足其工作的最低权限
- 后端代码检查输入数据是否符合预期,严格限制变量的类型,比如使用正则表达式进行匹配
- 对进入数据库的特殊字符(’,",,<,>,&,*)进行转义处理
- 应用上线前建议使用专业的SQL注入检测
命令行注入原理: 指的是攻击者能够通过 HTTP 请求直接侵入主机,执行攻击者预设的 shell 命令这往往是 Web 开发者最容易忽视但是却是最危险的一个漏洞之一。
5.DDOs攻击
DDos攻击原理:短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求。
DDos攻击特点:
- 直接访问IP
- 任意API
- 消耗大量带宽(耗尽)
DDo(如下图):
6.流量劫持
6.1-DNS劫持
DNS劫持原理:是将网络域名对应到真实计算机能够识别的IP地址,以便进一步通信。DNS劫持就是当用户通过某一个域名访问站点时,被篡改的DNS服务器返回的是一个钓鱼站点的IP,用户就被劫持到钓鱼网站,进而隐私泄露。
6.2-HTTP劫持
HTTP劫持原理:当用户访问某个站点时会经过运营商网络,不法运营商和黑厂勾结能够截获请求返回内容,并且篡改内容,然后再返回给用户,从而实现劫持页面,轻则插入小广告,重则直接串改成钓鱼网站骗用户隐私。
原文链接:www.ahwgs.cn/shenmeshiwe…
7.个人总结
这是继HTML、CSS、JS、前端设计模式和Web标准与前端开发学习后的第6天,今天主要讲的是Web开发的安全知识,我主要学习了在web开发中会遇到的各种漏洞,如(XSS、CSRF和各种数据劫持等知识)。对于我来说,我的个人基础比较差,对Web的开发安全知识都不是很清楚,所以我根据老师上课所讲的知识+课外查询的资料整理成了以上这篇文章,主要针对web前端涉及到的一些Web开发说话遇到的安全漏洞和解决方法,希望我的文章能让大家了解到web开发安全的基础知识,也希望能帮助到大家,谢谢!