这是我参与「第四届青训营」笔记创作活动的的第5天
前言
现在基于web的网站越来越多,如何保护用户数据和网站本身应用成了一件很大的问题,程序的漏洞不可能是百分之百没有漏洞的,现在已知的几种常见的攻击方式和变种攻击方式有一下几点,并对以下几个攻击方式和防御方式做出应对解决方案。
- XSS攻击
- CSRF攻击
- Injection注入攻击
- DOS攻击
- 传输层攻击
XSS攻击
XSS 又名跨站脚本攻击,本质上是通过修改通过利用开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。\
例如当用户的输入框里面传入代码,后端,前端都没有处理的输入内容的情况下对内容直接保存或者显示,就会造成XSS漏洞,此时黑客可以通过此代码进行极具破坏性的功能。
XSS攻击有如下特点:
- 难以感知
- 窃取用户信息
- 弹窗,诱骗用户填入信息
案例分析
存储型XSS:
当前后端都没有对用户数据进行出来了,此时网站是使用用户输入的代码进行显示的一个功能,此时已经存入数据库,本来只是想让用户通过某些规则输入一些可控代码,结果没有对输入数据进行处理加工,导致全站用户都能看见此恶意代码执行,导致全站崩溃的结果。本质从数据库上进行攻击,盲目信任用户数据并保存到数据库。
URL攻击XSS
现在有一个功能需要从用户输入的信息中提取参数,进行数据回显功能。此时盲目信任用户数据,直接进行回显,导致执行到恶意脚本,最终导致用户端崩溃,或者无法使用,或者被盗取信息。
浏览器渲染攻击XSS
当图片访问src属性的时候报错执行onerror回调,执行恶意脚本。
XSS DOM攻击
dom - xss是通过url传入参数去控制触发的)通过url获取参数脚本
XSS 防御
- 不要信任用户提交信息
- 前后端使用工具进行用户数据处理
CSRF攻击
CSRF又名跨站请求伪造,攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
案例
用户登录自己的哔哩哔哩,并且此时某网站或者某板块弹出黑客的网站,点击进入了第三方伪造的网站,并且偷取了用户的cookie并使用此cookie对指定网站进行认证登录调用特定接口,获取用户隐私数据,用户信息可能还会被恶意篡改。 下面点进了第三方网站,并加载了图片,虽然图片不可见,但确实访问了某个接口,并使用了用户数据。在你不知不觉中就被攻击了。
防御CSRF
- if 伪造请求 === 异常来源
- then 限制请求来源
- Origin 同源请求中,不发送GET+HEAD
- Referer
- CSRF - token防护
服务端给用户生成一个token, 加密后传递给用户。
用户在提交请求时, 需要携带这个token
服务端验证token是否正确
SQL注入
SQL注入类似XSS也是没有校验用户输入数据,导致执行SQL语句时候执行恶意脚本。
SQL防御
1.使用prepared statement
Dos攻击
通过某种方式攻击服务器,让服务器的资源耗尽,无法对用户信息进行处理,导致请求挤压,进而导致雪崩效应。
SYN FLoor
SYN Floor 俗称洪流攻击,通过TCP协议的特点进行攻击,大家都知道TCP有3次握手,攻击者发起请求后,服务器发送确认标志,攻击者一直不返回,并且多次发起请求,导致服务器最后崩溃。
Sync Floor的防御
1.不要暴露我们的真实IP
2.负载均衡
3.CDN
4.API网关
5.自动扩容
6.非核心服务降级
Logical DoS
通过攻击消耗和响应时间较长的接口,达到攻击目的。
Logical DoS的防御
1.如果是长时间的查询,并且很久不会更改,可以考虑缓存,避免多次查询造成服务器资源耗尽。
2.限流。
ReDos
基于正则表达式的工具,主要是通过正则的方式对某个接口进行性能消耗。
ReDoS防御措施
1.避免用户输入正则。
2.code Review。
3.正则性能测试。
传输层攻击
当我们网络传输时被黑客截取信息,从而达到攻击目的。
传输层防御
1.使用HTTPS
2.对数据进行加密
总结
今天学习的网络防御和攻击不仅用例子进行了描述,让我更深入理解过程和细节。对日后防御和编写代码的过程中会注意该如何编写好质量,防御攻击的代码。