学习笔记:CSRF
CSRF跨站请求伪造
CSRF跨站请求伪造,其与XSS有点类似,不过区别在于CSRF不一定依赖于JavaScript,并且不仅可以再源站发起攻击,还有可能当用户访问恶意网站是引导其访问原网站。CSRF攻击是源于WEB的隐式身份验证机制,WEB的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器,但却无法保证该请求是用户批准发送的。<font color=#0099ff size=3 face="黑体">对于CSRF的防御也分为服务端和客户端两种,服务端防御定典型的譬如给某个页面添加随机数,使得无法从第三方页面直接提交,在客户端防御的话可以利用譬如Firefox提供的一些检查工具。注意,CSRF并没有打破同源策略。同源策略限制了站点不能读取不同源的资源例如cookie,但是没有限制不能向不同源站点发送请求。</font>
CSRF.png
原因浅析
CSRF攻击源于WEB的隐式身份验证机制。假如Alice访问了一个恶意站点M,该站点提供的内容中的JavaScript代码或者图像标签会导致Alice的浏览器向站点T发送一个HTTP请求。由于该请求是发给站点T的,所以Alice的浏览器浏览器自动给该请求附上与站点T对应的该会话的cookie的sid。站点T看到该请求时,它就能通过该cookie推断出L该请求来自Alice,所以站点就会对Alice的账户执行所请求的操作。这样,CSRF攻击就能得逞了。
CSRF与XSS(跨站脚本攻击)
XSS攻击通常是指,攻击者向一个站点注入恶意代码(通常为JavaScript),以攻击该站点的其他用户。要想防御XSS攻击,站点必须仔细过滤所有用户的输入,以确保不被恶意代码注入。例如如果攻击者能在评论中夹杂上恶意JavaScript代码的话,那么这些JavaScript代码就会嵌入到所有包含该评论的页面中。当一个用户访问该站点时,攻击者的JavaScript代码就被执行,执行权限具有目标站点一切特权。嵌入目标站点的恶意JavaScript代码将能发送和接收来自该站点上的任何页面的请求,并能够访问由该站点设置的cookie。