承上篇,探討無原始碼情境下修改 ASP.NET 頁面行為的進階技巧。
ASP.NET 2.0 引入 <pages> 區段的 <tagMapping>,可將編譯時期的標記類型映射至替代類型,無需修改 .aspx 頁面。
<pages>
<tagMapping>
<add tagType="System.Web.UI.WebControls.GridView"
mappedTagType="CustomControls.SecureGridView" />
</tagMapping>
</pages>
所有頁面的 <asp:GridView> 將自動編譯為 SecureGridView,實現全站控制項替換(如修補 SQL 注入風險的舊版控制項)。
客戶網站大量頁面直接拼接查詢字串構建 SQL:
Dim code = Request.QueryString("Code").ToString()
Dim cmd = "SELECT * FROM customers WHERE id='" & code & "'"
快速修補導致新問題,需在不動原始碼前提下替換全站易受攻擊控制項。tagMapping 正是為此設計。
結合上篇的頁面基類替換、控制項樹操作、HTTP 處理常式重導向,構成「無原始碼修改 ASP.NET 行為」完整工具箱。