2012-07-11 29 views
1

在php中,當你處理GET/POST請求時,你必須檢查它們等等。如果參數缺失或不好,該怎麼辦?如果它應該是某種黑客攻擊,那麼你應該怎麼做?只有die();與「dontHackMe」?我們應該如何處理不良要求?

+4

發回錯誤的HTTP請求狀態碼。 – nhahtdh 2012-07-11 07:59:40

+2

對無效數據的響應方式取決於應用程序,但通常最好提供一個有用的錯誤消息和描述錯誤的描述。 – 2012-07-11 07:59:40

+1

我可能沒有讓你很好,但JavaScript是一個很好的工具,用於檢查插入的數據是否有效 – 2012-07-11 08:01:42

回答

3

不,不只是die()與「dontHackMe」。我看到兩個結果:

  1. 如果用戶不是惡意的,而且這是一個錯誤或一個誠實的問題,您已經向用戶提供任何幫助。
  2. 這實際上是一個非常業餘的反應,甚至可能引發實際的攻擊者尋找更多的安全漏洞。

HTTP定義了a list of status codes的響應。只需選擇正確的一個,並使用該代碼進行響應,並附帶某種默認響應頁面。

例如,如果請求格式不正確或以某種方式不正確,那麼400(錯誤請求)響應代碼是要走的路。響應中的實際頁面應該表明這是一個錯誤的請求,甚至可能會提供一個選項供用戶在需要時尋求幫助(例如鏈接到網站上的幫助部分或指向聯繫表單的鏈接) 。

這樣做的原因響應結構是兩方面的:

  1. 通過提供一個有用的頁面,你創建的輸出人類可讀的形式,人們可以看到和欣賞,讓您的應用程序,更方便用戶-友善。
  2. 通過在響應中返回正確的狀態碼(所有響應,而不僅僅是拒絕潛在的黑客攻擊嘗試),您可以創建一個機器可讀界面,自動化客戶端可以使用該界面更有效地與應用程序進行交互。 (A 400響應,例如,講述了一個非惡意自動化的客戶端,它不應該甚至懶得作出該請求再次...請求被接收和處理,並且發現其是壞的。)

編輯:澄清...這是爲了真正地迴應不好的請求。如果表格中提交的數據完全不正確(不符合業務規則,在打算用數字的地方使用字母等),那麼Michael Hampton offers a perfectly sound suggestion。本質上,服務器將「玩傻」並重新顯示錶單。

不要給潛在的攻擊者任何更多的信息比他們已經有。 (請記住,錯誤信息比他們已有的信息要多。)應用程序只會說:「嗯......你試圖提交這個表單,但這是錯誤的,在這裏,再試一次。」

1

不要發送HTTP 4xx響應,除非HTTP標頭本身有問題。

如果您收到來自客戶端的無效輸入,請重新顯示包含突出顯示無效字段的表單。