跨站点请求伪造
CSRF是跨站点请求伪造,它的请求有两个关键点,跨站点的请求与请求是伪造的,
从字面上看,跨站点的请求来源应该是其他站点,比如,目标网站接收到来源网站的恶意操作,但是,只要是恶意操作,即使是同源,也可以算作请求伪造,因为此操作并不是用户的意愿
场景
当有两个网站A和B的时候,目标A网站有一个删除文章的功能,当我们请求的url为
www.a.com/blog/del?id=1
用户点击删除的时候。变会发出一个get请求,这样便会删掉一篇文章
然后攻击者当A网站的用户进行了登录之后,诱骗A用户打开b网站,然后执行如下代码
<img src='www.a.com/blog/del?id=1' />
这样,攻击就会发生,则会删掉A网站的文章
对于CSRF攻击,其中最重要的是,需要用户登录,然后被诱导到恶意网站,从而获取到cookie的身份认证,然后进行相关恶意操作
那么,如果当用户使用post提交呢,我们查看如下代码
function new_form(){var f = document.createElement('form');document.body.appendChild(f);f.method='post';return f;
}function create_elements(eform,ename,evalue){var e = document.createElement('input');eform.appendChild(e);e.type = 'text';e.name = enameif(!doucment,all){e.style.display = 'none';}else{e.style.display = 'block';e.style.width = '0px';e.style.height = '0px';}e.value = evaluereturn e;
}var f = new_form();
create_elements(f,'tit','hi');
f.action = 'http://www.a.com/blog/add'
f.submit();
构建完成,当目标网站A的用户被欺骗访问的恶意网站时,一个跨域的post就会提交
危害
csrf的危害如下
- 篡改目标网站的数据
- 盗取用户隐私数据
- 作为其他攻击的辅助手法
- 传播蠕虫
如何防御
csrf能成功攻击的根本原因是攻击者能够猜到所有的参数,所以出于这个原因,我们在防御的情况下,可以使用token,因为token在进行数据请求或者操作的时候,是会生成一个随机数返回给客户端,所以这个不固定的数字可以让攻击者很难猜到。但是token仅仅是预防csrf用的。如果攻击者使用xss获取到token,那么该方案就会失效。这样的攻击可以称为xsrf
界面操作点击劫持
界面操作劫持是一种基于视觉欺骗的web劫持攻击,在正常的网页操作按钮上面,放入一个不可见的iframe,实际上用户的操作行为被其不可见的框所劫持,然后执行恶意代码
劫持分为以下三类
- 点击劫持
- 拖放劫持
- 触屏劫持
点击劫持
那么首先点击劫持首先的技术原理就是ifame+css样式表,我们把iframe 放入 需要输入的地方,然后再css中设置如下代码
iframe{position:absolute;z-index:9999;opacity:0.1
}
这三个代码是最关键的代码,首先position为定位,方便我们定位到需要交互的地方,然后z-index设置为最大层级,然后进行覆盖,最后opacity 进行隐藏
所以当用户点击正常交互的按钮时,其实触发了iframe的,然后执行了iframe的代码。
拖拽劫持
拖拽劫持其实在用户需要拖拽的地方,以及拖拽后到达的地方都有恶意代码进行覆盖。一般拖拽的目的是进行数据窃取
触屏劫持
触屏劫持,是指当用户进行手机操作的时候,进行劫持,比如,手机的屏幕很小,一般人员会隐藏手机的地址栏,但是,攻击者可以伪造地址栏给用户输入。然后进行劫持
结尾
对于点击劫持和xss等来说,点击劫持因为需要诱导用户与页面产生交互行为,因为实施的成本更高,在网路哟中比较少见,但是未来仍要注意被攻击的可能性