常见攻击
Cookie挟持
HTTP
是无状态的协议,为了维持和跟踪用户的状态,引入了Cookie
和Session
。 Cookie
包含了浏览器客户端的用户凭证,相对较小。Session
则维护在服务器,用于维护相对较大的用户信息。可以把Cookie
当成密码,而Session
是保险柜。由于HTTP
是明文传输,Cookie
很容易被盗取,如果被盗取,别人就可以冒充你的身份,打开你的保险柜,获取你的信息,动用你的资金,这是很危险的。
Cookie和Session的关系可以看这篇:浅谈session和cookie的关系
1.危害
盗取cookie
信息,冒充他人身份,盗取信息。
2.防御
- 给
cookie
添加HttpOnly
属性,该属性设置后,只能在http
请求中传递,在脚本中,document.cookie
无法获取到该cookie
值,对XSS攻击有防御作用,但对网络拦截还是会泄露。 - 在
cookie
中添加校验信息,这个校验信息和当前用户外置环境有些关系,比如ip
、user agent
等有关.这样当cookie
被人劫持冒用时,在服务器端校验的时候,发现校验值发生了变化,因此会要求用户重新登录,可以规避cookie
劫持。 cookie
中session id
的定时更换,让session id
按一定频率变换,同时对用户而言,该操作是透明的,这样保证了服务体验的一致性。
XSS跨站脚本攻击
攻击者在web
页面恶意插入HTML
或script
标签,当用户浏览该页面时,恶意代码就会被执行,从而达到攻击的目的。XSS
利用的是用户对指定网站的信任。
1.类型
-
反射型(非持久):攻击者事先制作好攻击链接,需要欺骗用户自己去点击链接才能触发
XSS
代码,所谓反射型XSS
就是将恶意用户输入的js
脚本,反射到浏览器执行。 -
储存型(持久型):会把攻击者的数据储存到服务端,攻击行为将伴随攻击数据一直存在,每当用户访问该页面就会触发代码执行。
-
DOM型:基于文档对象模型的漏洞。
最经典的存储型XSS
漏洞是留言板,当用户A在留言板留言一段JS
代码<script>alert("run javascript");</script>
,后端未经过滤直接存储到数据库,当正常用户浏览到他的留言后,这段JS
代码就会被执行,可以借此来盗取cookie
。
2.危害
- 盗取网页浏览中的
cookie
值,盗用cookie
实现无密码登录,盗取用户信息。 - 劫持访问,实现恶意跳转。
- 配合CSRF攻击完成恶意请求。
3.防御方法
- 标签过滤,如
<script>
、<img>
、<a>
标签等 - 编码,对字符
<
、>
、&
、"
、'
、+
、/
等进行转义。 cookie
防盗,将cookie
设置为http-only
,js
脚本将无法读取到cookie
信息。- 纯前端渲染,明确
innerText
、setAttribute
、style
,将代码与数据分隔开。 - 避免不可信的数据拼接到字符串中传递给这些
API
,如DOM
中的内联事件监听器,location
、onclick
、onload
、onmouseover
等,<a>
标签的href
属性,JavaScript
的eval()
、setTimeout()
、setInterval()
等,都能把字符串作为代码运行。
CSRF跨站点请求伪造
顾名思义就是通过伪造连接请求,在用户不知情的情况下,让用户以自己的身份来完成非本意操作的攻击方法。CSRF
利用的是网站对浏览器的信任。
1.原理
- 用户
C
浏览并登录信任网站A
,产生cookie
- 用户
C
未退出网站A
,在同一个浏览器危险访问网站B
- 网站
B
的页面存有一些攻击性的代码,会发出访问A
的请求 - 浏览器收到请求后,在用户不知情的情况下携带
cookie
访问网站A
A
不知道请求是谁发的,浏览器会带上用户的cookie
,所以A
会根据用户的权限处理B
发出的请求。这样就达到了攻击的目的。
2.防御
- 验证码:对敏感操作加入验证码,强制用户与网站进行交互
- 使用
POST
请求,避免使用GET
,降低攻击风险,post
请求攻击方需要构造一个form
表单才可以发起请求,比get
请求(img
的src
,a
标签的href
等等)的攻击方式复杂了一些,相对来说能降低风险,但不能阻止。 - 检查
HTTP
中的referer
字段,该字段记录了HTTP
请求的来源地址 - 在请求头中加入
token
验证字段,浏览器并不会自动携带Token
去请求,且Token
可以携带一段加密的jwt
用作身份认证,这样进行CSRF
的时候仅传递了cookie
,并不能表明用户身份,网站即拒绝攻击请求。 - 在
http
中自定义属性并验证。
点击挟持
-
ClickJacking点击劫持
当访问某网站时,利用CSS
将攻击者实际想让你点击的页面进行透明化隐藏,然后在页面后显示 一些东西诱导让你点击,点击后则会在用户毫不知情的情况下做了某些操作,这就是点击劫持ClickJacking
。
-
iframe覆盖
第三方网站通过iframe
内嵌某一个网站,并且将iframe
设置为透明不可见,将其覆盖在其他经过伪装的DOM
上,伪装的可点击DOM
(按钮等)与实际内嵌网站的可点击DOM
位置相同,当用户点击伪装的DOM
时,实际上点击的是iframe
中内嵌的网页的DOM
从而触发请求操作。
防御
- 设置
http
响应头X-FRAME-OPTIONS
是目前最可靠的方法。X-FRAME-OPTIONS
是微软提出的一个HTTP
头,专门用来防御利用iframe
嵌套的点击劫持攻击。
DENY // 拒绝任何域加载
SAMEORIGIN // 只允许同源域下加载
ALLOW-FROM // 可以定义允许iframe加载的页面地址
复制代码