none
Server.HtmlEncode()的使用時機 RRS feed

  • 問題

  • 1. 以下例而言,可以將 TextBox1.Text 的值經編碼後再輸出。

     

    Label1.Text = Server.HtmlEncode(TextBox1.Text)

     

    2.依據 Microsoft 說,只有在  @ Page 的 ValidateRequest="false" 停用網頁中的要求驗證時,這個範例才能作用。

     

    請問,如果不要將 ValidateRequest 設定為 false,是否就表示 Server.HtmlEncode 沒有效用,換句話說,根本就無須作編碼輸出。因為 ValidateRequest 不設定為 false, ASP.net 會自行驗證字串是否含有 HTML 標記,若有就會引發錯誤。那為何還要有編碼輸出的動作呢?

     

    敬請指導,謝謝。

    2008年11月4日 上午 02:17

解答

  • Hi chian,

     

    我覺得 MSDN 上面的文件【防止在 Web 應用程式中擅用指令碼】注意事項沒有寫好,所以讓你誤會了!

     

    當在加入 @ Page 屬性 ValidateRequest="false" 停用網頁中的要求驗證時,表單在送出時 ASP.NET 才會接受一些像是 < 或 > 的特殊字元,而當你要測試 Server.HtmlEncode 時,就是要輸入這些符號才看得出測試的效果,所以才會說「只有在加入 @ Page 屬性 ValidateRequest="false" 停用網頁中的要求驗證時,這個範例才能作用。」。

     

    @ Page 的 ValidateRequest="false"  與 Server.HtmlEncode 的執行是沒什麼關係的!

     

    就算 @ Page 的 ValidateRequest 被設定成 true ( 預設值 ),還是可以使用 Server.HtmlEncode 的!

    2008年11月4日 下午 01:09

所有回覆

  • HI,

     

    ValidateRequest 設定為 True, 還是可以利用Server.HtmlEncode 進行編碼處理, 如此可以加上雙重保護

     

    tihs

     

    2008年11月4日 上午 02:34
  • 困惑的是,Microsoft 建議不要停用實際執行應用程式中的要求驗證,這該如何處理才是上策。

     

    敬請再指導,謝謝。

     

    2008年11月4日 上午 02:38
  • Hi chian,

     

    我覺得 MSDN 上面的文件【防止在 Web 應用程式中擅用指令碼】注意事項沒有寫好,所以讓你誤會了!

     

    當在加入 @ Page 屬性 ValidateRequest="false" 停用網頁中的要求驗證時,表單在送出時 ASP.NET 才會接受一些像是 < 或 > 的特殊字元,而當你要測試 Server.HtmlEncode 時,就是要輸入這些符號才看得出測試的效果,所以才會說「只有在加入 @ Page 屬性 ValidateRequest="false" 停用網頁中的要求驗證時,這個範例才能作用。」。

     

    @ Page 的 ValidateRequest="false"  與 Server.HtmlEncode 的執行是沒什麼關係的!

     

    就算 @ Page 的 ValidateRequest 被設定成 true ( 預設值 ),還是可以使用 Server.HtmlEncode 的!

    2008年11月4日 下午 01:09
  • Microsoft 建議不要停用實際執行應用程式中的要求驗證

     

    那只是「建議」而已。

     

    但是當你真的需要用的時候,還是可以打開阿!

     

    至於處理的上策就是,當打開的時候 ( validateRequest="false" ),記得所有在網頁上輸出的資料都要加上 Server.HtmlEncode 處理!

     

     chian 寫信:

    困惑的是,Microsoft 建議不要停用實際執行應用程式中的要求驗證,這該如何處理才是上策。

     

    敬請再指導,謝謝。

    2008年11月4日 下午 01:12