2012-03-05 91 views
1

可能重複:
How to know where a form came from?PHP形式引用安全

我是通過這些論壇今天尋找,但我無法找到一個足夠好的回答我的問題。

如何阻止表單提交給我的服務器,除非他們是我的域中的轉介的。我意識到,如果有人直接複製我的表單HTML並將其粘貼到自己的平臺中,則表單中的數據將通過我的文件進行解析,然後執行表單在我的網站上執行的操作。

我該如何防止這種情況發生?我正在考慮檢查引薦來源是否來自我的域名,但是從我所研究的內容來看,這不會阻止這種情況的發生。那麼我怎樣才能阻止這種情況發生?

+2

'我已經意識到,如果有人直接複製我的表單HTML並將其粘貼到他們自己的平臺中,則表單中的數據將通過我的文件解析並執行表單設置在我的網站上執行的操作。澄清爲什麼這是(或可能是)一個問題?你真的不能阻止它 – 2012-03-05 19:18:38

+1

你的網站可以生成一個存儲在'$ _SESSION'中的隨機值,它必須由隱藏的輸入字段中的表單提交,但也可以編碼 - 它只是一個欄。如果沒有用戶身份驗證,你真的無法阻止它。 – 2012-03-05 19:19:32

+0

誠實地說,他們甚至不需要複製表單的html,使得發佈請求就足夠了。仍然 - 這是怎麼一個問題? – 2012-03-05 19:21:47

回答

3

REFERER容易被欺騙,但很容易覈對,從而防禦的主要障礙是不是太糟糕。對於更復雜的預防,您可以在加載有問題表單的頁面時生成一個標記,將其存儲在用戶會話中,將其保存在表單的隱藏字段中,並且在提交表單時根據會話進行檢查值。但是,如果有人願意,也可以規避這種情況,所以取決於您的具體情況是什麼,HTTPS將是最後的選擇。

0

你不能依靠引薦!它可以被禁用。

但是你可以使用你一)在一個隱藏的輸入字段和b)到用戶的會話寫token。 而在你的目標腳本中,你只需檢查它們是否相同!

3

有兩種類型的攻擊,你可能會試圖防範。

第三方誘騙用戶在網站上執行動作

這是Alice登錄到Bob的網站,那麼訪問攻擊者的網站,攻擊者網站引起Alice的瀏覽器進行(例如)向Bob的網站發送「轉賬」請求。

這是CSRF attack,標準defence是在隱藏字段中包含同樣存在於用戶會話中的令牌。

攻擊者無法獲得令牌把他們的形式,所以你知道的形式是在您的網站如果令牌匹配。

用戶修改數據的形式提交了一些他們真的不應該

例如,Alice提交編輯請求之前改變註釋的POST_ID數據,因此編輯別人的帖子,或也許她會改變正在訂購的商品的價格。

這種防禦是驗證輸入。如果有編輯請求,請確保登錄的用戶有權修改帖子。如果訂單來了,那麼只需要注意物品ID和數量,就可以從數據庫中獲得價格。等等

0

您試圖確保當POST進入您的應用程序,它來自您的服務器的FORM而不是其他地方。這被稱爲跨站請求僞造(CSRF)攻擊。

檢查引用者是有問題的。首先,HTTP規範特別允許客戶端不發送引用字符串(出於各種隱私原因)。所以,你的一些客戶可能不包括它。其次,推薦人字符串可能是欺騙性的,攻擊者具有足夠的技能可以使他們看起來像爲了成功實施CSRF攻擊所需要的。

使用CSRF驗證令牌是一種更強有力的方法,也是緩解CSRF攻擊的首選方法。你可以閱讀爲什麼這是在OWASP CSRF Cheat Sheet

我還會指出,沒有理由不能這樣做。深度防禦(DiD)策略通常是可取的,因此攻擊者需要擊敗多個獨立的防禦來執行成功的攻擊。您可以實施弱引用者檢查方法(如果引薦者是由客戶提供的,請確保它在執行請求之前應該是什麼;如果引薦者不存在,則繼續進行,就好像它存在且正確)以及CSRF驗證令牌。這樣,如果客戶提供它,而您仍然使用更強大的驗證令牌方法,則檢查引用的信息。