javascript - 如何阻止跨域脚本?

标签 javascript ruby-on-rails ruby request cors

domain1 Controller 中的action:

def show
  respond_to do |format|
    format.html
    format.js { render js: 'alert("Foo")' }
  end
end

当我在我的 domain2 View 中调用获取此 js 格式时,警报有效。

<script type="text/javascript" src="http://domain1/action.js"></script>

但是,由于 domain1 提供了 js 脚本,我原以为它不会工作。

我认为这是一个跨域请求。我错了吗?

我如何在 Rails 中阻止它(使用 cors - 我不考虑身份验证)?

请求 header :

Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:language=en; JSESSIONID=548BBE8340E2BCF88CC79FD406D87201; _session_id=36e9c1d96dd60d139edc669e4eb5311a
Host:domain1
If-None-Match:"4160518da6c411ed4f844684e3bd82e8"
Referer:https://domain2/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36

响应头:

Cache-Control:max-age=0, private, must-revalidate
Content-Length:13
Content-Security-Policy:default-src * 'unsafe-inline' 'unsafe-eval'; connect-src * 'unsafe-inline' 'unsafe-eval'; font-src * 'unsafe-inline' 'unsafe-eval'; frame-src * 'unsafe-inline' 'unsafe-eval'; img-src * 'unsafe-inline' 'unsafe-eval' data:; media-src * 'unsafe-inline' 'unsafe-eval'; object-src * 'unsafe-inline' 'unsafe-eval'; script-src * 'unsafe-inline' 'unsafe-eval'; style-src * 'unsafe-inline' 'unsafe-eval';
Content-Type:text/javascript; charset=utf-8
Date:Thu, 02 Jul 2015 14:36:17 GMT
Etag:"68a0bef3fb4d7408f31dfd3d2958cb4d"
Server:WEBrick/1.3.1 (Ruby/1.9.3/2013-11-22)
Strict-Transport-Security:max-age=631138519
X-Content-Type-Options:nosniff
X-Frame-Options:SAMEORIGIN
X-Request-Id:136ef12c007055e756e4ac1b7de83046
X-Runtime:0.264848
X-Ua-Compatible:IE=Edge
X-Xss-Protection:1

最佳答案

您可以包含来自任何域的代码,这就是像谷歌地图这样的库的工作方式。

在 JavaScript 中您不能做的是向其他域发出 (XMLHTTP) 请求,除非这些域具有允许您的域的源策略。

包括脚本不被视为跨域请求(这也是 JSONP 绕过来源限制的方式)。输出 CORS 策略不会停止请求。

关于如何阻止请求。这取决于你的情况。如果您将脚本作为 API 套件的一部分提供,最好的办法是使用身份验证 token 。

关于javascript - 如何阻止跨域脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31187903/

相关文章:

javascript - 在这种情况下,当我更新 arrayController 内容时,ember 会重新渲染 DOM 中的所有 li

javascript - 在 Select2 中显示结果后如何触发操作?

javascript - 使用 javascript_include_tag :all 加载订单

ruby-on-rails - 在表单 Rails 中创建多个对象

Javascript "if statement"和嵌入式 ruby​​(ruby 变量始终为 true)

javascript - 多选。交响乐形式

javascript - fadeIn 在 mouseleave(setTimeout) 之后从头开始

jquery - 在 Rails 中使用 Twitter Bootstrap Modal 时,“show”事件不会在 IE9 中触发

ruby-on-rails - Rails Rich Association - 覆盖关联模型

ruby - Powershell 和 Ruby 中不同的 SHA1 哈希结果