ASP.NET最佳化:Sql注入和Html注入的黑帽SEO

來源:互聯網
上載者:User

黑帽(black hat)SEO主要是指採取“不怎麼道德”(暫時就這麼形容吧!)的方式進行搜尋引擎最佳化。

1. 注入攻擊,包括Sql注入和Html注入。我經常能看到對Sql注入防範的談論,但對於Html注入,很多人並沒有引起足夠的重視。為了展示Html注入的效果,我們模仿了一個常見的留言本功能。

首先,在頁面聲明中添加兩個屬性設定EnableEventValidation=“false” ValidateRequest=“false” ,這很關鍵,讀者可以試一下如果不這樣設定會有什麼效果。

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" EnableEventValidation="false" ValidateRequest="false" %>

然後,前台頁面和後台程式碼片段分別如下:

<asp:TextBox ID="txtInput" runat="server" Height="95px" Width="405px" TextMode="MultiLine"></asp:TextBox>
        <asp:Button ID="btnSubmit" runat="server" Text="Simple Submit"
            onclick="btnSubmit_Click" />
        <asp:Label ID="lblShow" runat="server"></asp:Label>

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        this.lblShow.Text = this.txtInput.Text;
    }

程式很簡單,將使用者輸入的內容再顯示出來而已。運行代碼,然後輸入我們的惡意代碼,提交。

<p>Sanitizing <img src=""INVALID-IMAGE" onerror='location.href="http://too.much.spam/"'>!</p>

我們會發現頁面自動跳轉到http://too.much.spam/頁面!這就是所謂的“Html注入”。當page頁面render到用戶端後,瀏覽器會按一個普通的html頁面進行解析;當解析到上面的js代碼時……

為了避免這種入侵,在asp.net中,我們最簡單的處理方式就是對輸入的內容進行“Html編碼”。將後台代碼改為:

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        this.lblShow.Text = this.Server.HtmlEncode(this.txtInput.Text);
    }

現在我們再運行代碼,發現原始碼被原樣輸出顯示在頁面,並沒有運行。為什麼呢?查看輸出頁面的原始碼:

<span id="lblShow"><p>Sanitizing <img src=""INVALID-IMAGE" onerror='location.href="http://too.much.spam/"'>!</p></span>

整理後,我們發現如下的映射轉換:

<  --  <  (less than)
>  --  >  (greater than)
"  --  "   (quota)

所以js無法執行,但在頁面顯示時,我們確能看到“原汁原味”的js內容。

但問題並沒有結束,現實世界中,輸入的內容除了惡意代碼以外,還可能有如下的內容:

<span style=" color:blue">黑帽</span>(black hat)SEO主要是指採取<span style=" color:blue">“不怎麼道德”</span>(暫時就這麼形容吧!)的方式進行搜尋引擎最佳化。

我們希望顯示藍色的文字,但經過編碼後,顯然無法達到我們的效果。為此,我們還需要進行更精確的過濾。這也是為什麼之前我們要設定EnableEventValidation=“false” ValidateRequest=“false”的現實原因。

其實我最先想到的方案是:首先對整個內容進行編碼,然後把我們允許使用的html標籤再替換回來。這樣是相當保險的,但是在具體的操作中,遇到了很多問題,這個鬱悶啊~~~(如果有誰有這種實現的實現代碼,千萬要拿出來大家分享一下呀)。

我先介紹另一種方案:

首先要取出標籤,如,<span style=“ color:blue”>、</span>和<script >,我們的替換範圍僅局限於標籤 < > 之間的內容。

然後擷取所有的標籤名稱、屬性的名稱和值,如果有禁止出現的內容,就替換掉。可能的惡意代碼形式如下所示:

標籤的名稱: <script </script

標籤裡的屬性:<span onclick

屬性的值:<img onerror=“javascript:'



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.