Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何实现';安全';不使用Rails助手的定期执行器?_Javascript_Ruby On Rails_Prototypejs - Fatal编程技术网

Javascript 如何实现';安全';不使用Rails助手的定期执行器?

Javascript 如何实现';安全';不使用Rails助手的定期执行器?,javascript,ruby-on-rails,prototypejs,Javascript,Ruby On Rails,Prototypejs,我对RubyonRails非常陌生,从来没有真正热衷于编写JavaScript,因此内置的助手就像一个小小的天堂。 然而,我最近了解到,使用helper方法会创建“突兀的javascript”,因此我正在进行一点重构,以消除所有这些混乱的代码。我还使用Prototype API来了解所有这些函数的功能 现在,我有: <%= periodically_call_remote(:url => {:action => "tablerefresh", :id => 1 }, :f

我对RubyonRails非常陌生,从来没有真正热衷于编写JavaScript,因此内置的助手就像一个小小的天堂。 然而,我最近了解到,使用helper方法会创建“突兀的javascript”,因此我正在进行一点重构,以消除所有这些混乱的代码。我还使用Prototype API来了解所有这些函数的功能

现在,我有:

<%= periodically_call_remote(:url => {:action => "tablerefresh", :id => 1 }, :frequency => '5', :complete => "load('26', 'table1', request.responseText)")%>
{: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生成的。我假设这些是用来确保请求的有效性的。(确保请求来自当前活动的会话?)

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


提前感谢所有回答问题的人。

Rails生成一个身份验证令牌以防止XSS攻击。看:你可以关掉它,但你是对的,使用它更安全

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

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


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

谢谢,这正是我所需要的。那么,要实现XSS请求的伪造保护,唯一的方法是采用一种突兀的方法吗?由于.js文件从未被Rails解析过?是的,您必须在每个请求中输出一个新密钥&您的js应该被缓存。您也可以尝试更具创造性的方法,比如将其隐藏在DOM节点中等。但是,单个脚本标记不应该是这样的惩罚。有人说要在Rails 3中加入不引人注目的脚本,你可能想看看他们为此做了什么。