XSS 跨站腳本攻擊實例1


14.44-16.22  編碼,跨站腳本攻擊1

16.22-16.53 整理cnblog

 

這篇文章適合知道有XSS腳本攻擊,但是一頭霧水,從未操作過,也不知道腳本攻擊會給客戶端用戶帶來什么不便之處,有什么危害。

 

 

通過Asp.net實現搜索功能,你提交了搜索條件后都在搜索框下方第一行顯示  “您搜索的內容是:xxxx”

1.頁面有3個控件, 一個 輸入框(txtSearch),一個搜索按鈕(btn),一個div (id=”result”  runat=”server”)

 

Default.aspx代碼
  1. <%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
  2.     CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" ValidateRequest="false" %>
  3.  
  4. <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
  5. </asp:Content>
  6. <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
  7.     <asp:TextBox ID="txtSearch" runat="server"></asp:TextBox><asp:Button ID="btn"
  8.         runat="server"  Text="" onclick="btn_Click" />
  9.  
  10.   <div id="result" runat="server">
  11.   </div>
  12.  
  13. </asp:Content>

 

Default.aspx.cs代碼
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7.  
  8. namespace WebApplication1
  9. {
  10.     public partial class _Default : System.Web.UI.Page
  11.     {
  12.         protected void Page_Load(object sender, EventArgs e)
  13.         {
  14.  
  15.         }
  16.  
  17.         protected void btn_Click(object sender, EventArgs e)
  18.         {
  19.             result.InnerHtml = ": " + txtSearch.Text.Trim();
  20.             //result.InnerHtml = ": " + HttpUtility.HtmlEncode(txtSearch.Text.Trim());
  21.  
  22.         }
  23.     }
  24. }

 

 

分別在IE 和CHROME下分別測試

 

1. 在IE 和 chrome 下

1)搜索sdf,IE,chrome正常顯示:您搜索的內容是:sdf

image

 

2 )搜索內容為: </div><script type="text/javascript">alert('跨站攻擊鳥')</script><div>

 

您搜索的內容是 這段字符串是放在一個<div></div>

如果我們搜索 </div><script type="text/javascript">alert('跨站攻擊鳥')</script>

則 這段字符串變為  <div>       </div><script type="text/javascript">alert('跨站攻擊鳥')</script><div>   </div>,簽名2個div就閉合了,中間一個元素為script元素,最后div也閉合了

 

 

  • IE下展示為:

image

此處就彈出了對話框。對其他用戶有什么威脅呢?僅針對此情況來說,正常情況下,A用戶提交內容后,服務器都會將內容保存到數據庫服務器中,那么B用戶如果訪問到了A用戶評論的那個界面就會彈出上面的對話框。這就影響了網站整體體驗。

 

解決辦法:  后台給div賦值時候,請用html encode編碼

將上面btn按鈕的事件代碼改成 result.InnerHtml = "您搜索的內容是: " + HttpUtility.HtmlEncode(txtSearch.Text.Trim()) 就行了

 

如下圖,就不會彈出對話框來了,而是將搜索內容完全展示出來鳥

 

image

 

我們來查看html源碼,看見 html標簽信息都被編碼了,這樣瀏覽器就不知道這是一個腳本代碼

 

<div id="MainContent_result">您搜索的內容是: &lt;/div&gt;&lt;script type=&quot;text/javascript&quot;&gt;alert(&#39;跨站攻擊鳥&#39;)&lt;/script&gt;&lt;div&gt;</div>

 

  • chrome瀏覽器訪問
      

image

居然什么都不顯示,並且瀏覽器捕捉到了一些錯誤哦,提示xss攻擊

image

image

於是這個alert就不執行了。

 

 

 

本實例項目下載地址----->XSS實例1.zip

 

 

總結:

1.可見IE瀏覽器的安全性真夠糟糕,簡單的xss腳本攻擊都不做任何處理。所以大家盡量少用IE瀏覽器,盡量用火狐,谷歌的,並盡量使用最新版的。

2.解決辦法就是:保存用戶提交的數據后再展示之前一定要進行html encode編碼再展示

3. asp.net 默認機制  input value 提交后,返回的內容在你不賦值之前一定是html encode編碼,就像剛才提交的 </div>…<div>那段,返回的input value 就為&lt;script type=&quot;text/javascript&quot;&gt;alert('跨站攻擊鳥')&lt;/script&gt;   當然如果你賦值了,就以你賦值的為算。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM