2017-02-08 75 views
1

我必須確定請求是否來自本地主機。Rails,如何知道請求是否來自本地主機?

我想:

對於要求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技巧。

回答

4

request.local?作品,它返回0和紅寶石因此true是,因爲一切都在Ruby中,除了falseniltrue

如果你看看source code它與正則表達式完成的,所以0是預期和正確的結果

def local? 
    LOCALHOST =~ remote_addr && LOCALHOST =~ remote_ip 
end 
相關問題