2009-10-18 72 views
1

當您檢測到您的獲取請求已損壞或正在傳遞錯誤類型的數據時,您會做什麼?假設你有一個forum-page.php?forum = 3,其中列出了與論壇3相關的所有主題。處理缺少/錯誤類型的GET變量的最佳做法?

什麼是處理缺少「論壇」變量的好方法?那麼如果不是一個整數,你會得到一個字符串?你會如何迴應這種錯誤的要求?

  • 吐出一個錯誤,告訴你爲什麼拒絕了這一請求
  • 如果論壇-page.php文件被稱爲沒有「論壇」變量只是重定向到一個默認的頁面,像論壇-page.php文件?論壇= 1。對於錯誤鍵入的論壇變量也是如此。
  • 重定向到其他頁面。像論壇/董事會索引?
  • 其他選項?

真的很想閱讀你對此的看法。

回答

1

我通常會返回一個400(錯誤的請求)和狀態描述來解釋爲什麼(例如「需要論壇參數」)。不知道PHP是否允許這樣做(ASP.NET可以),但是你可以將400映射到一個自定義頁面,以一種對你的應用程序有意義的方式顯示錯誤。

0

這取決於每個頁面和他們的GET請求。大多數頁面(如您用作示例的頁面)可能會失敗,但其他需要丟失變量的頁面可能需要拋出400(錯誤請求)或404(頁面未找到)。 404實際上是非常必要的,因爲可能有一個不好的鏈接被搜索引擎搜索到,或者通過互聯網傳播,所以你想停止這種行爲。

我的看法是試試以下方法:

  1. 對於錯誤/缺少必需的變量,拋出一個400或404(取決於您的應用程序)。但是,對於400,我會優雅地失敗到默認頁面(forum-page.php),並在頁面頂部的錯誤框中顯示錯誤。
  2. 對於可能錯誤輸入的錯誤的非重要變量,優雅地失敗到默認頁面。
  3. 對於完全是錯誤的格式或對象類型的錯誤非必要變量,拋出404,因爲它們可能會破壞應用程序的安全性。

最終,永遠不要做的事情是嘗試「猜測」錯誤/缺失的變量並填寫給用戶(大多數情況下)。我遇到過很多web應用程序,這些行爲被黑客濫用來誘騙web應用程序模擬漏洞。