2013-10-11 51 views
0

我正在開發一個php網站,允許用戶添加描述,圖片等產品。我使用POST方法接收用戶輸入。但是,如果用戶知道表單輸入名稱和表單的操作鏈接,他們可以使用JavaScript發送不斷的請求並干擾我的數據庫。如何在PHP中獲取post請求的引用URL?

所以,如果我能以某種方式從POST請求的來源URL中獲取URL,我可以防止這種情況發生。如果POST請求來自我網站的網址,我只能將信息輸入數據庫。

我知道這種攻擊也可以使用captcha阻止,但我想要一個替代方案,主要是因爲驗證碼很痛苦。

任何我可以做到這一點,而不使用驗證碼?也許會議?

+0

有你看着[$ _ SERVER(http://php.net/manual/en/reserved.variables .server.php)? – UnholyRanger

+0

@UnholyRanger:是的,我有,似乎不符合我的目的。 – user2816220

回答

0

向您的表單提供安全性的最佳方式可能是向您的表單添加CSRF標記(http://en.wikipedia.org/wiki/Cross-site_request_forgery)。

它的工作原理是每次渲染表單時生成一個僞隨機代碼並將其存儲在會話變量中,並將相同的代碼作爲隱藏輸入放入您的表單中。

因此,當用戶發佈表單時,您可以驗證以查看csrf標記是否相同。

有關於這另一個線程,所以你也許可以看看那個 (How to properly add CSRF token using PHP

+0

謝謝! 幫助很多:D – user2816220

+0

您最歡迎:D –

0

您可以使用頭,只允許從您的網址張貼到來:

header('Access-Control-Allow-Origin: http://yoururl.com'); 

乾杯

+0

非常感謝:D .. 這是完全可靠的嗎?我的意思是這是否有助於驗證碼的目的? – user2816220

+0

是的,看看這裏:https://developer.mozilla.org/en/docs/HTTP/Access_control_CORS「如果http://bar.other的資源所有者希望限制對資源的訪問只能來自http ://foo.example,他們會發回: Access-Control-Allow-Origin:http:// foo。例如「 – VancleiP

0

你可以檢查對:

$_SERVER['HTTP_REFERER'] 

變量,但這是可以僞造的所以要小心。

你最好使用一些隱藏的輸入,這些輸入的值必須等於發生插入的設置字段(此時此技術的名稱使我轉義)。

<input type="text" id="areyouhuman" name="areyouhuman" value="123456001" /> 

隱藏它與CSS:

#areyouhuman{ 
    display:none; 
} 

希望幫助一下?

P.S.我也恨Captcha的!

+0

好吧,不僅是用CSS,我也可以使它以便沒有人能看到它.. 但是如果有人知道這個隱藏的值,他們可以很容易地發送這個值攻擊請求 據我所知,網絡專家可以轉儲發佈數據並找出發佈內容..也就是說,黑客有可能知道隱藏輸入的值...... :( – user2816220

+0

我想對於spambot來說,檢測隱藏的輸入要比被CSS隱藏的輸入要容易得多,但我不能肯定地告訴你,因爲我從來沒有覺得需要使用它。 – H2ONOCK