1. 程式人生 > >記錄一次網站漏洞修復過程(三):第二輪處理(攔截SQL註入、跨站腳本攻擊XSS)

記錄一次網站漏洞修復過程(三):第二輪處理(攔截SQL註入、跨站腳本攻擊XSS)

cat nbsp ebe 嵌入 網頁 防止 記錄 用戶輸入 light

在程序編寫的時候采用參數化的SQL語句可以有效的防止SQL註入,但是當程序一旦成型,再去修改大量的數據庫執行語句並不是太現實,對網頁表單上輸入進行校驗是易於實現的方法。在webForm 頁面中開啟校驗屬性:

ValidateRequest="true"
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Line.aspx.cs" Inherits="EcospSite.Line" ValidateRequest="true" %>

但是有的時候也不太好使,只能自己編寫代碼檢查用戶的輸入,如果直接在頁面上添加校驗,工作量比較大,並且需要很多測試工作,在global.asax 中 添加攔截方法還是比較合適的。

 void Application_BeginRequest(object sender, EventArgs e)
    {
        string path = this.Request.Path.ToLower();
       
        System.Collections.Generic.List<string> group_sql = new System.Collections.Generic.List<string>();
group_sql.AddRange(new string[] {
"a.aspx", "b.aspx", "c.aspx", "d.aspx","e.aspx","f.aspx" });
foreach (string item in group_sql) { if (path.EndsWith(item)) { SQLCheck.CheckQueryParamRequest(this.Request, this.Response); // 檢查URL中是否有非法語句 SQLCheck.CheckFormParamRequest(
this.Request, this.Response); // 檢查表單中是否有非法語句 break; } } }

如果輸入沒有校驗通過,程序丟出異常,跳轉到異常處理頁面

對於處理 跨站腳本攻擊XSS也可以采用同樣的處理方式,不過校驗的格式可能有所不同,一個是防止執行惡意SQL語句,一個是防止執行惡意腳本。另外在關鍵頁面顯示用戶輸入的地方,最好對內容進行轉義處理,保證惡意嵌入的HTML、SCRITP無法執行。

記錄一次網站漏洞修復過程(三):第二輪處理(攔截SQL註入、跨站腳本攻擊XSS)