我使用的是backbone.js,效果很好。 但我作为一个JavaScript模板创build的表单缺lessrails csrf保护令牌。 如何将它添加到我在JavaScript中创build的模板?
我知道有通常的方式来渲染CSRF标记隐藏inputform_rest ,但有没有办法只呈现CSRFinput本身? 我已经覆盖主题中的{% block field_widget %}来渲染一段附加文本。 但是,由于CSRF标记也在input字段中呈现,并且我得到了一段文本,因此不需要在隐藏字段旁边。 所以我想单独渲染一个参数,告诉它不要渲染这个文本。
这是关于生成CSRF令牌的问题。 通常我想根据与用户会话相关的独特数据生成令牌,并使用密钥进行哈希和腌制。 我的问题是在没有唯一的用户数据使用时生成令牌。 没有会议可用,cookies不是一个选项,IP地址和这种性质的东西是不可靠的。 是否有任何理由不能将string作为请求的一部分join? 示例伪代码来生成令牌并embedded它: var $stringToHash = random() var $csrfToken = hash($stringToHash + $mySecretKey) <a href="http://foo.com?csrfToken={$csrfToken}&key={$stringToHash}">click me</a> CSRF令牌的示例服务器端validation var $stringToHash = request.get('key') var $isValidToken = hash($stringToHash + $mySecrtKey) == request.get('csrfToken') 在散列中使用的string将在每个请求上不同。 只要包含在每个请求中,就可以继续进行CSRF令牌validation。 由于每个请求都是新的,只有embedded到页面中,所以不能访问令牌。 令牌的安全性然后下降到我知道的$ mySecretKey。 这是一个天真的方法? 我错过了一些原因,为什么这不能工作? 谢谢
早在2011年2月,Rails就被更改为要求所有非GET请求的CSRF令牌 ,即使是针对API端点的CSR请求也是如此。 我理解为什么这是浏览器请求的一个重要变化的解释,但是博客文章没有提供关于API如何处理变化的任何build议。 我对禁用某些操作的CSRF保护不感兴趣。 API应该如何处理这个变化? 是否期望API客户端向API发出GET请求以获取CSRF令牌,然后在该会话期间的每个请求中包含该令牌? 看起来,令牌不会从一个POST改变到另一个。 假设令牌在会话期间不会改变是否安全? 当会话过期时,我不喜欢额外的error handling,但是我认为比在每个POST / PUT / DELETE请求之前必须获取一个令牌要好。
TokenMismatchException可以使用try catch块捕获吗? 而不是显示debugging页面,显示“TokenMismatchException VerifyCsrfToken.php行46 …”,我希望它显示实际的页面,只是显示一个错误信息。 我没有与CSRF的问题,我只是希望它仍然显示页面,而不是debugging页面。 复制(使用Firefox):步骤: 打开页面( http://example.com/login ) 清除Cookies(域,path,会话)。 我在这里使用web开发工具栏插件。 提交表格。 实际结果:“哎呀,看起来像是出了问题”页面显示。 预期结果:仍然显示login页面,然后传递“令牌不匹配”的错误或其他东西。 请注意,当我清除cookie时,我没有刷新页面,令令牌生成一个新的密钥,并强制错误。 更新(新增表格): <form class="form-horizontal" action="<?php echo route($formActionStoreUrl); ?>" method="post"> <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>" /> <div class="form-group"> <label for="txtCode" class="col-sm-1 control-label">Code</label> <div class="col-sm-11"> <input type="text" name="txtCode" id="txtCode" class="form-control" placeholder="Code" /> </div> </div> <div class="form-group"> <label for="txtDesc" class="col-sm-1 control-label">Description</label> […]
使用PUT或DELETE方法可以实现CSRF吗? 或者使用Put / Delete来防止CSRF?
我在ASP.Net MVC中的AntiForgeryToken有问题。 如果我在我的web服务器上执行iisreset,并且用户继续他们的会话,他们会跳转到login页面。 这并不可怕,但是AntiForgery令牌爆炸了,唯一的办法就是在浏览器上吹走cookie。 有了版本1的testing版本,它在我读取cookie的时候会出错,所以我在请求validation令牌之前先擦除它,但是当它被释放的时候它就被修复了。 现在我想我会回滚到我的代码,修复testing版的问题,但我不禁想到我错过了一些东西。 有一个更简单的解决scheme,赫克我应该放弃他们的帮手,并从头创build一个新的? 我感觉到很多问题都是因为它和旧的ASP.Netpipe道很紧密地联系在一起,并且试图把它搞糊涂做一些没有真正devise的东西。 我看了一下ASP.Net MVC 2 RC的源代码,看起来代码没有太大变化,但是我没有尝试过,我不认为这里有任何答案。 这是exception堆栈跟踪的相关部分。 编辑:我只是意识到我没有提到,这只是试图插入令牌的GET请求。 这不是在你开始POST时发生的validation。 System.Web.Mvc.HttpAntiForgeryException: A required anti-forgery token was not supplied or was invalid. —> System.Web.HttpException: Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. […]
我build立一个移动应用程序通过web服务与我的symfony2应用程序交谈我无法find一种方法来禁用特定的控制器/动作的csrf保护 我想发布注册数据到这个动作,并使用sf2表单validation。 我不会在我的移动应用程序中调用该表单 无法更改容器参数,抛出一个exception,因为它是一个冻结的参数… 我不想为整个应用程序禁用表单保护 任何线索? 谢谢 ! 更新:用symfony 2.1.x /** * {@inheritdoc} */ public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'csrf_protection' => false, )); }
我现在正在用Ruby on Rails开发Web API 。 当Rails应用程序收到没有任何csrf标记的POST请求时,将会发生以下错误消息。 因为该应用程序没有意见。 WARNING: Can't verify CSRF token authenticity 所以我的问题是如何在这种情况下安全地转义csrf令牌检查? 非常感谢你提前。
我正在构build一个专门为其请求和响应内容(即没有表单编码的有效载荷)使用JSON的Web服务。 如果以下情况属实,Web服务是否容易受到CSRF攻击? 任何没有顶级JSON对象的POST请求,例如{"foo":"bar"} ,将被拒绝400.例如,带有内容42的POST请求将因此被拒绝。 任何具有application/json以外的内容types的POST请求都将被拒绝,例如,带有内容typesapplication/x-www-form-urlencoded的POST请求将被拒绝。 所有的GET请求将是安全的 ,因此不会修改任何服务器端的数据。 客户端通过会话cookie进行身份validation,web服务通过带有JSON数据的POST提供正确的用户名/密码对,例如{"username":"user@example.com", "password":"my password"} 。 辅助问题: PUT和DELETE请求是否容易受到CSRF的影响? 我问,因为它似乎大多数(所有?)浏览器不允许在HTMLforms这些方法。 编辑:添加项目#4。 编辑:到目前为止,很多好评和答案,但没有人提供了一个特定的CSRF攻击,这个Web服务是脆弱的。