Rails,如何知道请求是否来自localhost?

时间:2017-02-08 16:48:34

标签: ruby-on-rails request localhost

我必须确定请求是否来自localhost。

我在尝试:

对于请求http://localhost:3000

# MyController
request.local?     # -> 0
request.host       # -> localhost
request.ip         # -> ::1
request.remote_ip  # -> ::1

对于请求http://127.0.0.1:3000

# MyController
request.local?     # -> 0
request.host       # -> 127.0.0.1
request.ip         # -> 127.0.0.1
request.remote_ip  # -> 127.0.0.1

我想知道是否有标准的方法来做到这一点。这看起来像解决方案:ApplicationController.local_request?受保护并且无法正常工作,因为request.local?正在为本地请求返回0

我也不相信request.host,因为它可能会被/etc/hosts诡计伪造。

1 个答案:

答案 0 :(得分:4)

request.local?有效,它返回0因此在Ruby中是true,因为Ruby中的所有内容都是truefalsenil除外

如果您查看使用正则表达式完成的source code,那么0就是预期的正确结果

def local?
  LOCALHOST =~ remote_addr && LOCALHOST =~ remote_ip
end