这是我参与「第四届青训营 」笔记创作活动的第6天
摘要:
在日常的Web开发当中安全问题十分常见,其对于用户本身、公司与程序员都有着极大得危害,本篇旨在通过自己的学习整理介绍一些网络攻击方式
1. 跨站脚本攻击——Cross-Site Scripting(XSS)
简介:
XSS攻击是指黑客通过“HTML注入”篡改网页,插入恶意的脚本,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的,比如用户信息泄露或者用户设备被当作“挖矿”机器
XSS主要利用的信息:(此处只列举两点)
- 盲目信任用户提交的表单信息
- 盲目将某些字符串添加为DOM
XSS的一些特点
- 通常难以从UI上感知(暗地执行脚本)
- 窃取用户信息(cookie/token)
- 绘制UI(例如弹窗),诱骗用户点击/填写表单
举例:
由图可见的是,以上两个API中均没有对于content的过滤,这就很容易被恶意进行XSS攻击
XSS可以分为如下几类:
- stored XSS
恶意脚本储存在服务器端,访问即攻击,危害最大
- reflected XSS
从URL上攻击,访问链接即攻击
- DOM XSS
DOM XSS的XSS代码不需要服务端解析响应的直接参与,触发XSS的是浏览器端的DOM解析。
- Mutation-based XSS
- 利用浏览器渲染DOM的特性(独特优化)
- 不同浏览器,会有区别(按浏览器攻击)
2. 跨站伪造请求——Cross-site request forgery(CSRF)
以用户的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…造成的问题包括:个人隐私泄露以及财产安全。
举例:
由图可以看到,在用户并没有发起访问的前提下,恶意网页伪造用户cookie,向银行页面发起转账请求,因为伪造cookie的缘故,服务器判断为合法请求,于是用户的资金被非法转移,整个过程中用户并没有进行任何危险操作,单纯是攻击方利用手段伪造用户授权进行非法攻击
3. 注入攻击——Injection
(1)SQL injection
某次http请求携带SQL参数,到达服务器端后被解析为SQL语句,此时此恶意注入的语句将可能对服务器中的数据进行篡改,删除等诸多危险操作
当然注入攻击也不止SQL,还有诸如以下的方式:
- CIL
- OS commend
- Server-Side Request Forgery (SSRF),服务端伪造请求(其实严格意义上,SSRF不属于injection,但是原理相似)
4. Denial of Service(DoS)
通过某种方式(构造特定请求),导致服务器资源被消耗,来不及响应更多请求,导致请求被挤压,进而雪崩效应
基于正则表达式的DoS——ReDoS
在此我们可以举一个小的例子,但在介绍例子之前我们需要对正则表达式的贪婪模式有一个基本的了解,简单来讲就是?的使用:重复匹配时["?" vs "no?"]:满足一个即可 VS 满足尽量多
了解这一点后,我们的例子如下:
由上图左端可以看到,争对无论一个ab的字符串还是一系列ab的重复的字符串,都可以正常匹配,但是对于第三个字符串,我们可以发现,它是在ab重复后添加了a,这样在贪婪模式下将很可能发生回溯行为,即如图中右侧所示,会按照不断减少匹配次数的方式回溯,直到最终发现无法匹配,攻击者可以利用这一点向要攻击的网页中注入这样一个需要回溯的脚本,这样带来的直接影响就是程序的响应时间,接口的吞吐量的上升,从而造成网页的崩溃。
Distributed DoS——DDoS
短时间内,来自大量僵尸设备的请求流量,服务器不能计时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求
攻击特点:
- 直接访问IP
- 任意API
- 消耗大量带宽(耗尽)
5. 基于传输层的攻击方式
中间人的攻击方式
如图中所示的,中间人的攻击方式是在浏览器端与服务器端交互的过程中拦截数据,作为第三者窃取数据,浏览器端认为自己在与服务器交互,而服务器认为自己在于浏览器交互
以上攻击的发生是因为一以下几点漏洞的存在:
- 明文传输
- 信息篡改不可知
- 对方身份未验证