繞過用編碼方式阻止XSS攻擊的幾個例子


阻止攻擊的常用方法是:在將HTML返回給Web瀏覽器之前,對攻擊者輸入的HTML進行編碼。HTML編碼使用一些沒有特定HTML意義的字符來代替那些標記字符(如尖括號)。這些替代字符不會影響文本在web瀏覽器上的顯示方式,僅僅用於阻止HTML渲染引擎將數據識別成HTML標記。這種方法能阻止一些XSS攻擊,但是以下幾種情況例外:

在Script塊中插入:

<script>
...
var strEmailAdd = 'attacker data';
...
</script>

在這個例子中,數據本身就已經在script塊中了,攻擊者要做的就是關閉引用標記。

...
var strEmailAdd = '';alert('Hi');//
...

引號加分號結束,最后可以注釋掉其他輸出內容避免出現阻止腳本運行的語法錯誤。

 

使用事件:

在HTML中,標記的屬性能夠被封裝在單引號和雙引號中,或者不需要引號。如果HTML的設計人員沒有使用雙引號來封裝屬性值,並對用戶的數據進行了HTML編碼,那么,這些不可信的數據會被限制在標記的范圍內,而不是限制在屬性的范圍內。大部分的標記有事件發生的時候,用戶定義的與那個事件相關聯的腳本就會運行。

如果不可信數據經過HTML編碼,並且在HTML中返回如下內容的時候,腳本仍然能夠運行:

 

<INPUT name="txtinput" type="text" value='unTrustData'>

如果 OurData' onclick=alert(Hi) junk=' 作為不可信數據發送,將會返回如下所示HTML:

<INPUT name="txtinput" type="text" value=' OurData' onclick=alert('Hi') junk=''>

當用戶單擊文本框時,onclick事件就被激發了,腳本就會運行。

 

使用Style:

Style中的表達式能夠被用來運行任意腳本,例如:

<INPUT name="txtinput" type="text" value="SomeValue" style="font-family:expression(alert('Hi'))">

腳本協議:

通過IMG標記中src屬性值的形式,將它們返回。

<IMG src="untrusted data">

 

 兩種不同過濾的例子:

1.在返回數據前,刪除輸入中的字符串。但是如果輸入scriscriptpt,刪除后剩下的就是script。

2.通過轉義來阻止分隔屬性。

 

深入理解瀏覽器中的解析器:在<script>和</script>之間的任何東西都會被當作腳本,並對它們進行語法檢查。

<script>
var strMyVar = '</script><script>alert('快船總冠軍')</script>';
...
</script>

瀏覽器會把上述內容解釋為兩個<script>塊,第一個塊有語法錯誤,並且不會運行。但是第二個塊語法正確會運行。

 

 

 


免責聲明!

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



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