Rails 5.2 API模式吞咽默认安全标头吗?



如果我在application.rb中输出config.action_dispatch.default_headers,我会看到所有标准导轨标头:

{"X-Frame-Options"=>"SAMEORIGIN", "X-XSS-Protection"=>"1; mode=block", "X-Content-Type-Options"=>"nosniff", "X-Download-Options"=>"noopen", "X-Permitted-Cross-Domain-Policies"=>"none", "Referrer-Policy"=>"strict-origin-when-cross-origin"}

但是,如果我向我的应用程序提出请求(使用卷曲/浏览器/Postman(,我看不到以上任何一个。我只看到以下内容:

$  curl -v -XGET 'localhost:4000/myresource/581'
* TCP_NODELAY set
* Connected to localhost (::1) port 4000 (#0)
> GET /myresource/581 HTTP/1.1
> Host: localhost:4000
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: application/json; charset=utf-8
< ETag: W/"292a7d87b10e292374e765dd0b56fee7"
< Cache-Control: max-age=0, private, must-revalidate
< X-Request-Id: 7ff75ff6-f598-4489-9439-a4c17c6a5480
< X-Runtime: 0.025049
< Transfer-Encoding: chunked
<

这一切都是本地运行的,没有网络服务器/代理。在生产中,我缺少相同的标头。

Rails API模式是否删除了它认为与API无关的标头?还是我的应用程序中只能是其他代码?

API模式下的Rails 5.x不包括ActionDisPatch默认标头。

这是一个问题:https://github.com/rails/rails/issues/34940。

,但现在已修复,将在版本6.0.0中使用:https://github.com/rails/rails/rails/pull/32484

我几个月前遇到了同一问题,@matheus提到他们在rails 6中修复了这一点,但是如果您陷入了rails 5.2,这就是我的情况,这就是我的方式修复了问题,希望这会有所帮助!👍:

before_action :put_headers
  def put_headers
    response.set_header('Referrer-Policy', 'strict-origin-when-cross-origin')
    response.set_header('X-Content-Type-Options', 'nosniff')
    response.set_header('X-Frame-Options', 'SAMEORIGIN')
    response.set_header('X-XSS-Protection', '1; mode=block')
    response.set_header('Content-Security-Policy', "default-src 'self' https:; " 
        "img-src 'self' https:;" 
        "media-src 'none'; " 
        "object-src 'none'; " 
        "script-src 'self'; " 
        "style-src 'self' ")
  end

请注意,以上只是example of configuration,意味着您需要将自己的逻辑添加到上面的所有标题(例如内容安全策略(的配置中,请确保在应用程序控制器上设置该代码(此站点可能有助于安全配置(。

相关内容

  • 没有找到相关文章

最新更新