gpt4 book ai didi

ruby-on-rails - Rails,如何知道请求是否来自本地主机?

转载 作者:行者123 更新时间:2023-12-04 06:10:05 24 4
gpt4 key购买 nike

我必须确定请求是否来自本地主机。

我正在尝试:

对于请求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 技巧伪造。

最佳答案

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

如果您查看 source code它是用正则表达式完成的,所以 0 是预期的正确结果

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

更新 Rails 6.1(可能)

Rails 的当前主分支现在使用 match? 方法执行此操作,因此将返回 truefalse

Source

def local?
LOCALHOST.match?(remote_addr) && LOCALHOST.match?(remote_ip)
end

关于ruby-on-rails - Rails,如何知道请求是否来自本地主机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42118990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com