2013-07-19 59 views
-2

我想知道是否有辦法確保通過POST發送的表單來自我的網站。我查看了一些教程,他們建議我使用「隱藏」輸入值進行驗證,但是這可能毫無意義,因爲任何人都可以查看我網站的html源代碼,收集諸如文本框名稱屬性之類的信息。如何確保POST表單通過我的網站發送?

讓我知道如果我不清楚。

直到最近,我開始學習使用PHP和ASP.NET來製作網站。所以,請稍微清楚,因爲我只是一個初學者。提前致謝。

+0

可能的重複:http://stackoverflow.com/questions/5631324/accept-post-from-only-自己的服務器 – Pieter

回答

4

您可以檢查引薦網址,如果它與您的域匹配,那麼它是安全的。

$ref = $_SERVER["HTTP_REFERER"]; 

比較價值$ ref與您的域名後,分裂它只獲得域名。

+0

這是可行的,但我不認爲'那麼它是安全的':因爲這也可以改變 –

+0

@ØHankyPankyØ在網絡中沒有任何東西是安全的,但作爲一個啓動開發者,這種技術可以給出積極的步驟網絡安全。 – user2598238

+0

後面的部分是正確的,+1爲你的答案:) –

0

那麼你知道你期望從你的表單中獲得什麼字段和數據,所以最好的辦法是根據這個來驗證POST數據。如果您知道您期待x個字段,然後驗證並驗證該數據。例如,如果您有一個包含日期輸入的字段,請使用PHP確保它是有效的日期。如果它是一個整數,在將它用於任何事物之前驗證它是一個整數。對於文本字段,去掉所有html和JavaScript等等。你明白了。

這樣做比嘗試驗證表單是否從您的網站發佈要好得多。

2

您也可以在表單頁面上設置一個$_SESSION變量並在處理頁面上檢查它。

+0

這很聰明:) –

+0

^erm ....這是幾年的標準做法.... – itachi

3

您可以使用一種稱爲跨站請求僞造的技術:http://en.wikipedia.org/wiki/Cross-site_request_forgery

本質的做法大致是:

  • 創建一個大的隨機字符串,其存儲在服務器端的會話
  • 包括您表單中的隱藏字段,表示隨機生成的上述號碼
  • 當您處理表單時,請檢查表單和會話表示。
  • 破壞會議的代表

這一過程的主要限制是你的形式是有時間限制的,會話銷燬敏感,將只與用戶的交互工作。

一旦你掌握了PHP的基礎知識,爲什麼不看看使用框架?我使用Symfony2很多,他們有一個很好的表格包,從一開始就處理這種安全問題:http://symfony.com/doc/current/book/forms.html#csrf-protection