Nic*_*ick 62 ruby-on-rails csrf
我是一名PHP开发人员,通过阅读Michael Hartl的教程来学习Ruby on Rails .以下是本书的引用,指的是csrf_meta_tag:
... Rails方法
csrf_meta_tag[防止]跨站点请求伪造(CSRF),一种恶意Web攻击.不要担心细节(我没有); 只知道Rails正在努力保证您的应用程序的安全.
问题是,我真的很好奇.插入csrf-param和csrf-token元标记如何阻止CSRF?我试过谷歌搜索,但找不到任何东西.
Fre*_*ung 75
csrf_meta_tag 基本上与隐藏表单字段完成相同的事情,但是提供与表单无关的javascript请求是获取令牌的简单方法.
如果使用jquery-ujs库,则会自动将该元标记的内容添加(作为请求标头)给任何ajax请求.
jef*_*unt 56
在页面中csrf_meta_tag插入本质上是数字签名,作为验证进入应用程序服务器的请求实际上来自正确登录的用户.这有助于防止跨站点脚本(当您在另一个选项卡中登录GMail时,一个完全不相关的页面上的脚本触发请求,例如,GMail).
我想澄清一下,csrf_meta_tag它本身并不能阻止一个不相关的页面向您的GMail(或任何其他攻击目标服务)发出请求,但其中的"数字签名" csrf_meta_tag用于验证其有效性.说请求.无效请求(即来自跨站点脚本尝试)应该验证失败,因此被丢弃.
换句话说,从攻击者的角度来看:
在csrf_meta_tags存在之前(它们不以任何方式排斥Rails),成功的跨站点脚本攻击允许恶意站点以某种方式向Web应用程序提交数据,使得请求看起来好像是代表用户完成的.因此,假设您是网络服务的管理员,并在一个浏览器选项卡中登录该服务的管理面板.如果在另一个选项卡中打开的恶意站点以您的服务为目标进行攻击,则恶意站点可能能够运行发出管理员请求的脚本,例如从数据库转储用户列表,窃取其他敏感数据或可能损害,破坏,或者销毁服务中包含的数据,同时出现(从服务器的角度来看)是管理员自己的有效请求.这csrf_meta_tag是一种签署请求的方式,并有助于阻止这些尝试成功.
还有一个更详细的解释可以在这里找到.
在你的一个Rails生成的页面上做一个"查看源代码"也很有教育意义,你会看到CSRF标签的样子.
AMI*_*ING 14
在Rails中,它将以这种方式工作
def csrf_meta_tags
if protect_against_forgery?
[
tag('meta', :name => 'csrf-param', :content => request_forgery_protection_token),
tag('meta', :name => 'csrf-token', :content => form_authenticity_token)
].join("\n").html_safe
end
end
Run Code Online (Sandbox Code Playgroud)
您还需要检查Ruby On Rails安全指南
这是一个不错的博客
但是 - 我更喜欢国家漏洞数据库,这里有很好的解释
查看此文档以获取CWE - Common Weakness Enumeration
| 归档时间: |
|
| 查看次数: |
48205 次 |
| 最近记录: |