2011-02-01 75 views
9

在ASP.NET中使用QueryString時,我一直在尋找一些最佳實踐指導,並且還沒有找到任何指導。在ASP.NET中使用查詢字符串的最佳做法?

我已經找到一個有用的優化文章:http://dotnetperls.com/querystring

但我更感興趣的是回答下列問題:

  • 案例規則?全部小寫? Pascal案例?駱駝香菸盒?
    • 我個人的偏好都是小寫,但一致性是最重要的。
  • 避免參數名中的特殊字符?
  • 爲安全起見,參數和值應該被模糊處理嗎?

等等

更多的指導,將不勝感激!

+3

長度也應該是一些考慮因素,因爲一些瀏覽器有限制。 – Victor 2011-02-01 21:09:46

+1

網址與個案無關 – IrishChieftain 2011-02-01 21:12:46

回答

10

不管你的查詢字符串是什麼,終端用戶都可以查看和修改。這意味着他們有可能改變它來查看或訪問他們不應該的數據,或者影響您的網站/應用程序的行爲。所以不用說,您對查詢字符串沒有任何信任,並且在使用它之前檢查所有內容。當你檢查它時,不要檢查是否有錯誤與它(這可能是一個無限列表),而是檢查的東西是正確的。如果即使其中一個檢查失敗,您也應該丟棄查詢字符串數據,或將其視爲可疑。如果您已經對查詢字符串中的數據進行了加密或編碼,如果用戶弄亂了它,並且您盲目地信任它,即使用戶的更改由於編碼而變得無意義,它仍可能具有意想不到的副作用。

我在存儲敏感數據到查詢字符串中的一種方法是不做;相反,我將存儲敏感數據服務器端(在Session,Cache或數據庫中的一個表中),然後我將在查詢字符串中有一個隨機生成的鍵(通常是一個GUID)來標識它,所以URL會顯示像這樣:

http://myurl.com/myPage.aspx?secretKey=73FA4A5A85A44C75ABB5E323569628D3 

這是相當困難的蠻力一個GUID和GUID衝突的機會是無限小,所以如果使用查詢字符串最終用戶混亂,然後他們最終卻一無所獲。

當我需要存儲很多事情並且查詢字符串開始變得太長 - 需要跟蹤的數據可以保存在一個對象中,然後存儲在會話或緩存中,並且再一次GUID被用作其關鍵。

4

我5毛錢:

如果你有一個頁面,它可以被其他人叫,像

http://myurl.com/myPage.aspx?secretKey=73FA4A5A85A44C75ABB5E323569628D3 

那麼你不希望他們遇到問題時,他們拼錯的祕密密鑰K個不要把它寫成大寫字母

所以在這裏我的規則:

  1. 做它全部用小寫。從不大寫,因爲有一些小寫字母沒有相應的大寫字母,例如德語雙精度字母。

  2. QueryString["mykey"].ToLower().Equals("73FA4A5A85A44C75ABB5E323569628D3") 是一個壞主意,因爲QueryString["mykey"]可能是NULL(異常NULL引用)。

  3. 沒有複雜的事情,如果string.IsNullOrEmpty() if else if object.equals(querykey, "comparison")。只需使用StringComparer.OrdinalIgnoreCase.Equals(key, "73FA4A5A85A44C75ABB5E323569628D3"),這在NULL上工作,返回false,不需要額外的null/emtpy檢查。