2016-04-29 82 views
2

我讓用戶點擊發送到他們電子郵件的鏈接,將他們帶到一個表單(比如register.php)來完成他們的註冊。表單使用php提交安全性

我有register.php在表單提交檢查:

if(isset($_POST['submitted']) and $_SERVER['REQUEST_METHOD'] == 'POST') { 
    //register user in database 
} 

我的問題是:可能有人在技術上簡單地創建帶有$ _ POST自定義HTTP POST請求繞過這個正式的註冊過程[「提交」 ]集?如果是這樣,有什麼好辦法檢查這個?我檢查有人試圖以未經授權的方式訪問註冊頁面,但我覺得有人在頁面上發佈不夠安全。如果我決定使用HTTPS,我應該甚至擔心這一點嗎?我希望這是有道理的。提前致謝。

+0

你總是可以隨機令牌添加到您已經生成和發送到電子郵件收件人之前存儲的查詢字符串。當他們點擊鏈接時,請驗證令牌位於白名單中。 –

+0

_某人在技術上規避_...: - 是的。 _什麼是檢查這個的好方法?_: - 生成一個隨機標記,用電子郵件發送它,然後檢查它。 _if我決定使用HTTPS?_: - https與此有什麼關係? – Federkun

+1

是的,任何人都可以構建自定義表單並從任何地方「運行」它。他們需要的只是一些html,它表示'

'。繁榮......發送到你的服務器,而不是從你的東西的任何地方發起。 –

回答

5

您描述的問題稱爲跨站請求僞造。通過生成一個令牌,並將該窗體中的隱藏輸入的值設置爲令牌,可以防止此攻擊。另外,將會話變量設置爲令牌值。在接收發布數據的PHP表單中,檢查會話令牌和發送的令牌是否匹配。如果他們匹配,表單來自您的網站。

這是另一個堆棧溢出問題,其中包含有關防止跨站請求僞造的更多詳細信息:How to prevent Cross-site request forgery (CSRF) effectively in PHP