Monday, January 07, 2008 - 文章

KB-J avascript: Is Not Allowed In HyperLinkField!

今天才發現這點。我在ASP.NET 2.0的GridView中想要放一個HyperLinkField觸發Javascript Function,但一在DataNavigateUrlFormatString中加上"j avascript:"字眼,產出的HTML裡,該Link會完全消失,只剩下DataTextField的純文字。

<asp:HyperLinkField DataNavigateUrlFields="PRODID,PRODCHNAME" 
    DataNavigateUrlFormatString="j avascript:fpSelProd('{0}','{1}');void(0);" 
    DataTextField="PRODID" HeaderText="產品代碼" >
    <HeaderStyle Width="80px" />
    <ItemStyle Width="80px" HorizontalAlign="Center" />
</asp:HyperLinkField>

稍微推敲了一下,這應是ASP.NET 2.0安全強化的一環。由於HyperLinkField Url中的部分內容來自於資料庫裡的欄位,而資料內容來源有可能來自使用者的輸入,無形中可能淪為駭客發動XSS攻擊的管道(如果你還不知道什麼叫XSS,可以看這篇文章),所以ASP.NET 2.0索性一看到j avascript:就把連結移除,把這管道徹底給封了。

網路上有一些解決方案: 其中有一種是改用TemplateField,自己在後端組出<a href="j avascript:....">...</a>丟出來,但依我的看法,如果沒處理好,它還是有可能提供駭客偷渡惡意Javascript Code的機會,除非對欄位內容來源及安全性有絕對的把握,否則不建議使用。

針對這個需求,我這次的做法是在TD掛上onclick事件,再透過DOM去讀出各欄位裡的產品代碼及產品名稱,雖然囉嗦了點,但比直接將資料欄位值組成Javascript來得安全,也才不辜負了ASP.NET 2.0的一番美意。

搜尋

Go

<January 2008>
SunMonTueWedThuFriSat
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789
 
RSS
【工商服務】
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


BlogLook Score and Rank

Syndication