2010-10-30 50 views
0

我試圖利用$_SERVER,但它不適合我。如果用戶沒有從這裏來,那麼不要處理 - 如何?

我需要的是:

爲了我的網站上訪問一個頁面,用戶必須來自貝寶回來。如果他沒有從PayPal重定向到我的網站,那麼不要執行該文件,而是給用戶一個錯誤。

我該怎麼做?

我試過如下:

$url = 'paypal'; 
if(strstr($_SERVER['HTTP_REFERER'], $url)) { 
    // my code 
} else { 
    // my error 
} 

這並沒有爲我工作,我怎樣才能使這項工作,從貝寶例如鏈接(這是很長):

https://www.paypal.com/us/cgi-bin/webscr?cmd=_flow&SESSION=39QzTUoR0GugSwdZjeJ5zf4EkFIa2-rlRsdrqxfx4O3ibIMuzY3Eab7y6Dq&dispatch=5885d80a13c0db1f8e263663d3faee8dc60d77e6184470d515cedf52660ea0cd 

請幫助,這是我正在處理的一些安全漏洞。

+6

Dugi,請爲此使用一個庫。這是一件嚴肅的事情,你必須確保一切安全。從迄今爲止所寫的內容來看,您對安全性沒有太多的經驗 – Harmen 2010-10-30 15:51:40

+5

並在您接觸時接受其他問題的一些答案。 – mway 2010-10-30 16:10:04

回答

5

你不能可靠地保證。一般來說,在這些情況下,您可以使用支付網關進行服務器端檢查,以查看交易ID(或任何傳回給您的信息)是否有效,並且金額是否已成功支付。

你應該考慮檢查PayPal的Instant Payment Notification服務併爲此實現一個監聽器。 PayPal的some sample code用於各種語言。這是IPN協議的簡要概述:

  1. PayPal發送您的IPN監聽器,通知您事件的消息(收到付款,例如)。

  2. 您的監聽器將完整的未更改消息發送回PayPal;該消息必須以相同的順序包含相同的字段,並以與原始消息相同的方式進行編碼。

  3. 貝寶發回一個單詞,如果消息始於PayPal,則返回VERIFIED;如果最初發送的消息有差異,則返回INVALID

  4. IPN驗證通過後,您可以解鎖用戶支付的功能/選項,如@cHao suggested in the other answer

延伸閱讀:

1

檢查的任何方法是什麼網站用戶來自可以被用戶欺騙,無論是出於利用的原因(繞過「爲我的東西付錢」部分)或隱私(「這不關你的事,我只是看着」)。不要依賴於關鍵的東西。

您最好從PayPal收聽IPN帖子,並使用它們解鎖人們已付費的功能。可能會有一點延遲,但通常很短。通常在用戶反彈到「感謝您的訂單!」時頁面,並點擊鏈接訪問他們購買的產品,IPN已經通過。

1

引用者不可靠。他們經常被阻擋或更換。用戶客戶可以用他想要的任何東西替換它們。

您相信客戶端出錯了。

您需要直接從貝寶獲得確認,或者貝寶需要給用戶一個不可僞造的標記。

而且您還需要驗證付款金額。否則用戶可以只支付1美分。

1

老實說,如果你認爲

$url = 'paypal'; 
if(strstr($_SERVER['HTTP_REFERER'], $url)) { 
    // my code 
} else { 
    // my error 
} 

會阻止一個安全漏洞,我會建議你付出別人更多的經驗來爲你做這個,因爲它很可能你還必須在系統中的其他孔。付款安全非常重要。

如果您仍想自己動手,請閱讀PayPal IPN here

相關問題