javascript - 如何在不使用 Rails 助手的情况下实现 'safe' 周期执行器?

标签 javascript ruby-on-rails prototypejs

我对 Ruby on Rails 非常陌生,并且从来不热衷于编写 JavaScript,因此内置的帮助程序就像一小片天堂。 然而,我最近了解到,使用辅助方法会创建“引人注目的 javascript”,因此我正在做一些重构,以将所有这些困惑的代码从我的视野中剔除。我还使用 Prototype API 来弄清楚所有这些函数的作用。

现在,我有:

<%= periodically_call_remote(:url => {:action => "tablerefresh", :id => 1 }, :frequency => '5', :complete => "load('26', 'table1', request.responseText)")%>

产生:

<script type="text/javascript"> 
    //<![CDATA[
    new PeriodicalExecuter(function() {new Ajax.Request('/qrpsdrail/grids/tablerefresh/1', {asynchronous:true, evalScripts:true, onComplete:function(request){load('26', 'table1', request.responseText)}, parameters:'authenticity_token=' + encodeURIComponent('dfG7wWyVYEpelfdZvBWk7MlhzZoK7VvtT/HDi3w7gPM=')})}, 5)
    //]]>
</script>

我担心的是“encodeURIComponent”和“authenticity_token”的存在是由Rails 生成的。我假设这些用于确保请求的有效性。 (确保请求来自当前事件 session ?)

如果是这种情况,我如何在 application.js 中“安全”地实现它?看来内置方法虽然很唐突,但确实增加了一些有益的安全性。

提前感谢所有回答的人。

最佳答案

Rails 生成身份验证 token 以防止 XSS 攻击。请参阅:ActionController::RequestForgeryProtection您可以将其关闭,但是,您是对的,使用它更安全。

想到的最简单的解决方法是将身份验证 token 放在页面顶部的某个位置:

<% javascript_tag do %>
<%= "var AUTH_TOKEN=encodeURIComponent(#{form_authenticity_token.inspect});" %>
<% end %>

这很唐突,但至少你可以在 application.js 文件中自由使用 AUTH_TOKEN 变量。

关于javascript - 如何在不使用 Rails 助手的情况下实现 'safe' 周期执行器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2795280/

相关文章:

javascript - 在javascript中计算2个给定时间的差异

SQL order_by 表达式

php - 使用 Ajax.Request 调用 PHP 方法

javascript - 如何使用 JavaScript 获取包含哈希片段的先前 url?

javascript - 防止 Firefox 打开被阻止的弹出窗口

javascript - 将 javascript 类实例限制为特定属性

ruby-on-rails - 当从应用程序(而不是控制台)调用时,如何让 ActiveJob 在 Heroku 上的 Sidekiq 中排队作业?

ruby-on-rails - 附加的图像没有用回形针保留

javascript - 检测实际的形式变化?

javascript - 使用对象字面量创建原型(prototype)库选项卡