热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

单页应用程序的RailsCSRF保护(反应,角度,余烬)

如何解决《单页应用程序的RailsCSRF保护(反应,角度,余烬)》经验,为你挑选了2个好方法。

好。我正式对这个问题失去了理智。

我们使用默认的Rails应用程序(5,但我也尝试使用4默认应用程序)。

我正在尝试使用一个简单的Javascript代码将ajax POST请求发送到一个控制器动作。

在我的ApplicationController代码中:

class ApplicationController 

设置"X-CSRF-Token"值为的COOKIE form_authenticity_token

之后,我可以使用以下代码在SPA(单页应用程序)中读取此COOKIE:



当我使用此行时:

var token = document.getElementsByName('csrf-token')[0].content;

它之所以有效,是因为它读取了Rails在html页面中插入的内容:

<%= csrf_meta_tags %>



因此,“ csrf令牌”的内容有效,并且我的Rails应用程序可以验证CSRF。

这是来自Rails的代码:https : //github.com/rails/rails/blob/v5.2.0/actionpack/lib/action_controller/metal/request_forgery_protection.rb

相反,当我使用此行:

const token = readCOOKIE("X-CSRF-Token");

它不起作用,我得到这个错误:

Started POST "/api/v1" for 172.18.0.1 at 2018-05-01 18:52:56 +0000
Processing by MyController#action as */*
  Parameters: {"body"=>{}}
Can't verify CSRF token authenticity.
Completed 422 Unprocessable Entity in 2ms (ActiveRecord: 0.0ms)
ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):

另外,如果我在具有相同脚本的其他服务器(npm http-server或Microsoft IIS或其他服务器)上使用另一个页面,则问题是相同的。

如果我从Rails html页面复制“ csrf-token”的内容并在我的Javascript脚本中使用此行:

const token = "VXaKlO+/Gr/8pGhr5y0bThQ5L/0IDiznMR/9SpaoI6vOoF9KtmB5/9ka+Hz+zjyssNRi/Em/Ye27C+E5pl3odg==";

有用!

所以我的问题是:为什么?


我读过什么(什么都没有!):

https://github.com/equivalent/scrapbook2/blob/master/archive/blogs/2017-10-12-csrf-protection-on-single-page-app-api.md

无效的Auth令牌与Rails,Graphql,Apollo客户端

https://www.bhalash.com/archives/13544808782

Rails CSRF Protection + Angular.js:protect_from_forgery让我注销POST

https://technpol.wordpress.com/2014/04/17/rails4-angularjs-csrf-and-devise/

使用真实性令牌吗?还是禁用它?

在不禁用CSRF保护的情况下进行Rails API设计

小智.. 6

Tnx,我让您的代码正常工作。我只需要添加decodeURIComponent()

const token = decodeURIComponent(readCOOKIE("X-CSRF-Token"));

我将这种方法用于带有缓存html的渐进式Web应用程序。默认的rails元标记(<%= csrf_meta_tags %>)与缓存的html不兼容。

该博客文章还提供了其他一些替代方法:https : //www.fastly.com/blog/caching-uncacheable-csrf-security



1> 小智..:

Tnx,我让您的代码正常工作。我只需要添加decodeURIComponent()

const token = decodeURIComponent(readCOOKIE("X-CSRF-Token"));

我将这种方法用于带有缓存html的渐进式Web应用程序。默认的rails元标记(<%= csrf_meta_tags %>)与缓存的html不兼容。

该博客文章还提供了其他一些替代方法:https : //www.fastly.com/blog/caching-uncacheable-csrf-security



2> 小智..:

Rails期望的标题名称是X_CSRF_TOKEN(请注意下划线)。我看不到您共享的其余代码的问题-也许COOKIE中的令牌必须经过URI解码(decodeURIComponent),所以也没有问题,因此,如果仍然收到警告,请也进行检查。


推荐阅读
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • adfs是什么_培训与开发的概念
    adfs是什么_培训与开发的概念(如您转载本文,必须标明本文作者及出处。如有任何疑问请与我联系me@nap7.com)ADFS相关开发技术的中文资料相对匮乏,之前在弄这个东西的时候 ... [详细]
  • 我正在尝试将Firebase添加到涉及添加以下内容的现有应用程序中:classpath'com.googl ... [详细]
  • ASP.NET MVC 小牛之旅3:Routing——网址路由
    网址路由(Routing)在ASP.NETMVC中有两个主要用途,一个用途是匹配通过浏览器传来的HTTP请求,另一个用途则是响应适当的网址给浏览器。3.1匹配通过浏览器传来的HTT ... [详细]
  • 第一种&amp;amp;lt;script&amp;amp;gt;$(&amp;quot;.eq&amp;quot;).on(&amp;qu ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 可空类型可空类型主要用于参数类型声明和函数返回值声明。主要的两种形式如下: ... [详细]
author-avatar
平凡屋之换
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有