我想知道是否有辦法確保通過POST發送的表單來自我的網站。我查看了一些教程,他們建議我使用「隱藏」輸入值進行驗證,但是這可能毫無意義,因爲任何人都可以查看我網站的html源代碼,收集諸如文本框名稱屬性之類的信息。如何確保POST表單通過我的網站發送?
讓我知道如果我不清楚。
直到最近,我開始學習使用PHP和ASP.NET來製作網站。所以,請稍微清楚,因爲我只是一個初學者。提前致謝。
我想知道是否有辦法確保通過POST發送的表單來自我的網站。我查看了一些教程,他們建議我使用「隱藏」輸入值進行驗證,但是這可能毫無意義,因爲任何人都可以查看我網站的html源代碼,收集諸如文本框名稱屬性之類的信息。如何確保POST表單通過我的網站發送?
讓我知道如果我不清楚。
直到最近,我開始學習使用PHP和ASP.NET來製作網站。所以,請稍微清楚,因爲我只是一個初學者。提前致謝。
您可以檢查引薦網址,如果它與您的域匹配,那麼它是安全的。
$ref = $_SERVER["HTTP_REFERER"];
比較價值$ ref與您的域名後,分裂它只獲得域名。
這是可行的,但我不認爲'那麼它是安全的':因爲這也可以改變 –
@ØHankyPankyØ在網絡中沒有任何東西是安全的,但作爲一個啓動開發者,這種技術可以給出積極的步驟網絡安全。 – user2598238
後面的部分是正確的,+1爲你的答案:) –
那麼你知道你期望從你的表單中獲得什麼字段和數據,所以最好的辦法是根據這個來驗證POST數據。如果您知道您期待x個字段,然後驗證並驗證該數據。例如,如果您有一個包含日期輸入的字段,請使用PHP確保它是有效的日期。如果它是一個整數,在將它用於任何事物之前驗證它是一個整數。對於文本字段,去掉所有html和JavaScript等等。你明白了。
這樣做比嘗試驗證表單是否從您的網站發佈要好得多。
您可以使用一種稱爲跨站請求僞造的技術:http://en.wikipedia.org/wiki/Cross-site_request_forgery
本質的做法大致是:
這一過程的主要限制是你的形式是有時間限制的,會話銷燬敏感,將只與用戶的交互工作。
一旦你掌握了PHP的基礎知識,爲什麼不看看使用框架?我使用Symfony2很多,他們有一個很好的表格包,從一開始就處理這種安全問題:http://symfony.com/doc/current/book/forms.html#csrf-protection
可能的重複:http://stackoverflow.com/questions/5631324/accept-post-from-only-自己的服務器 – Pieter