2014-03-31 48 views
0

所以我有一個網站,讓你買和下載MP3的。這些mp3都是由我製作的。但是,當用戶通過PayPal結帳過程(我已經有按鈕和IPN所有設置)時,我的IPN腳本會存儲訂購ID以及用戶從哪裏購買MP3的IP地址。 IPN腳本生成鏈接到用戶PayPal電子郵件的下載鏈接和電子郵件。使用PHP的REMOTE_ADDR變量驗證下載是否是個好主意?

所以無論何時用戶點擊下載鏈接,它都會將用戶帶到我的下載頁面。在下載頁面上,它會查找數據庫中的下載ID以及用戶購買MP3時的訂購ID,MP3 ID和IP地址。我不得不驗證用戶當前IP地址的數據庫IP地址並讓用戶下載它嗎?我使用以下格式存儲IP地址:

getenv('REMOTE_ADDR') in PHP。

或者我應該跳過任何驗證並讓任何點擊該鏈接的人下載該文件?

回答

0

好吧,首先你應該考慮你的問題背後的邏輯。

僅作爲示例:

用戶從您的網站購買歌曲。第一個問題應該是,如果你允許他暫時(1,2,3小時,天......)訪問這個下載鏈接,或者只是一次調用該下載鏈接,或者終身保證該用戶有權訪問它。

設置完這些基本信息後,您可以繼續。

情況1(臨時訪問): 存儲$ _REMOTE_ADDR是一個很好的開始,但如果這個用戶坐在一個VPN網絡後面,在局域網等等......還有更多的方法。你應該閱讀關於HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR,HTTP_X_FORWARDED ...等等!

你甚至應該記住所有$ _SERVER屬性都可以被操縱。所以就像一個建議:你應該在將所有變量存儲到數據庫之前進行清理,而不是盲目地信任它們。

回到問題:出於安全原因,您現在已經存儲了ip,好吧。也許你害怕被騙。沒關係。您的腳本會生成一個下載鏈接,該鏈接將被髮送到paypal電子郵件地址。現在你有兩種選擇:

第一:用戶已通過貝寶和everthing驗證是好的。所以你不需要害怕任何事情。

在這種情況下,您應該考慮劃定用戶訪問文件的時間。現在想象一下,這個用戶有幾百萬個朋友,比如說,你會以他的名義發送他已經收到的鏈接給他的所有朋友,他們會嘗試訪問你的服務器並下載你的文件 - 假設你的服務器硬件會這樣做!

因此,首先一個更好的方法是劃定訪問鏈接的時間,例如1,2,3個小時......購買後 - 仍然不完美,但這會避免上述情況。

如果您進一步將其限制爲IP--假設您將學習如何以正確的方式獲得 - 用戶可以從他從中購買IP地址下載您的mp3。當用戶使用智能手機並希望從家中以外的地方下載時,該怎麼辦?我是對的,用戶必須創建一個帳戶才能使用您的優惠?

比解決方案可以存儲一個mp3已被某個用戶下載的頻率。在這裏你可以設置一個限制到50次,這應該是一個安靜的歌曲多次下載一次又一次....你甚至會得到一個概述,如果用戶將被記錄一次或有這個用戶發佈他的登錄數據非法分享問題。

秒:用戶未通過PayPal驗證並嘗試欺騙您。想象一下,他將在PayPal創建一個帳戶,並留下不正確的銀行/帳戶信息。 PayPal會先付款,然後嘗試從錯誤的帳戶信息中重新獲得資金。當PayPal認識到用戶帳戶中留下的信息錯誤時,他們肯定會取消整個交易並從您的帳戶中重新獲得。最終你在接受貝寶時永遠是失敗者。抱歉。

對自己坦誠相待:如何抓住一些試圖欺騙你的人? 0,0000000032423%可能與您網站上的整體風險損失了很多錢用於調查。

相關問題