2013-04-05 24 views
5

我得到一個支付網關https的帖子來驗證付款等。我需要驗證該帖子是否來自域名。Nodejs表示請求標題 - 獲取引用者等。

我試着去驗證引用來自域的特定名單,但在我req.headers我沒有看到一個引用|引用者選擇:

{ 'x-real-ip': '123.34.45.176', 
    'x-forwarded-for': '123.34.45.176', 
    host: 'my.foo.com', 
    'x-nginx-proxy': 'true', 
    connection: 'close', 
    'user-agent': 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)', 
    accept: '*/*', 
    'content-length': '441', 
    'content-type': 'application/x-www-form-urlencoded' } 

爲什麼我的頭空這些字段如引用者,起源等?

這是一個後內:

app.post('/payment/notify/', function(req, res){ 
    req.headers 
}) 
+0

也許我可以檢查IP地址是否是域名之一? – Harry 2013-04-05 07:24:57

+0

是這就是我要做的,從IP地址獲取主機名。我不認爲他們給我的原因是因爲HTTPS。我使用DNS模塊獲取主機名。像在這個答案prestaul http://stackoverflow.com/questions/4255264/getting-client-hostname-in-node-js – Harry 2013-04-05 07:31:51

回答

10

並非所有的請求有一個參照標頭。

如果瀏覽器的最後一頁是安全服務器(https),那麼它不會向您傳送引薦者。

此外,如果您的用戶在您的地址欄中鍵入您的地址,您也不會收到引薦人。

+0

在我的情況下,我從支付網關獲得一個帖子來確認付款。我需要驗證它是否來自付款域。你有什麼建議? – Harry 2013-04-05 07:17:16

+5

依靠引薦者並不是確定付款是否已經完成的安全方式。您需要爲支付網關設置某種後端查詢。舉個例子,當一個人在應用中做Facebook登錄時,應用從facebook獲得一個訪問令牌,然後它傳遞給服務器,服務器向Facebook發出請求以驗證訪問令牌。你不只是拿它的應用程序的話。這並不安全。因此,如果您需要知道是否進行了付款,則需要向支付網關發出後端請求。 – Daniel 2013-04-05 08:19:28

+1

標題信息可能被欺騙,尤其是'Referer',因此依賴它是不好的 – 2014-01-15 20:09:47