跨站伪造请求CSRF(Cross-site request forgery)

CSRF是说攻击者可以利用别人的权限去执行网站上的操作,例如删除资料。例如,攻击者张贴了以下脚本到网页上:

<img src="/posts/delete_all">

攻击者自己当然是没有权限可以执行”/posts/delete_all”这一页,但是网站管理员有。当网站管理员看到这一页时,浏览器就触发了这个不预期的动作而把资料删除。
要防范CSRF,首先可以从区别GET和POST的HTTP请求开始。我们在路由一章提过:所有读取、查询性质操作,都应该用GET,而会修改或删除到资料的,则要用POST、PATCH/PUT或DELETE。这样的设计,就可以防止上面的恶意程式码了,因为在浏览器中必须用表单form才能送出POST请求。
不过,这样还不够。因为即使是POST,浏览器还是可能不经过你同意而自动发送出去,例如:

<a href="http://www.harmless.com/" onclick="
  var f = document.createElement('form');
  f.style.display = 'none';
  this.parentNode.appendChild(f);
  f.method = 'POST';
  f.action = 'http://www.example.com/account/destroy';
  f.submit();
  return false;">To the harmless survey</a>

所幸,Rails内建了CSRF防御功能,也就是所有的POST请求,都必须加上一个安全验证码。在app/controllers/application_controller.rb你会看到以下程式启用这个功能:

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
end

这个功能会在所有的表单中自动插入安全验证码:

<form action="/projects/1" class="edit_project" enctype="multipart/form-data" id="edit_project_1" method="post">
    <div style="margin:0;padding:0;display:inline">
    <input name="_method" type="hidden" value="patch" />
    <input name="authenticity_token" type="hidden" value="cuI+ljBAcBxcEkv4pbeqLTEnRUb9mUYMgfpkwOtoyiA=" />
</div>

如果POST请求没有带正确的验证码,Rails就会丢出一个ActionController:InvalidAuthenticityToken的错误。
Layout中也有一段<%= csrf_meta_tags %>是给JavaScript读取验证码用的。

Cross-Site Request Forgery (CSRF) Attack Lab是一个网络安全实验,旨在测试和演示跨站请求伪造攻击(CSRF)的原理和实践。实验中通过创建恶意网页和利用漏洞,攻击者可以伪造用户身份进行各种未经授权的操作,如修改个人资料、发送消息等。 在实验中,针对Elgg网络社交平台进行了CSRF攻击的演示。在Task 1中,可以观察到攻击者发送了HTTP请求并窃取了Alice的个人资料。在Task 4中,实验也提供了一种对抗CSRF攻击的方法。 对于问题中的具体内容,如果Bob想要对访问他恶意网页的任何人进行攻击,他无法直接通过恶意网页修改受害者的Elgg个人资料。这是因为要发送修改请求,需要知道受害者的id号,而在这种情况下,Bob并不知道访问者的id号。如果要攻击其他用户,Bob需要先获取其id并修改攻击的请求报文。 在CSRF攻击实验中,通过网络抓包可以看到攻击者的网站发送了添加好友的请求报文给Elgg服务器,使得攻击者成功添加了Boby为好友。这是通过伪造Alice的身份来实现的。 总结起来,Cross-Site Request Forgery (CSRF) Attack Lab是一个网络安全实验,通过演示和测试跨站请求伪造攻击的原理和实践,并提供了对抗CSRF攻击的方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Cross-Site Request Forgery (CSRF) Attack Lab网安实验](https://blog.csdn.net/l4kjih3gfe2dcba1/article/details/118705162)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值