XSS又叫CSS英文縮寫為Cross Site Script
中文意思為跨站腳本攻擊
具體內(nèi)容指的是惡意攻擊者往Web頁面里插入惡意html代碼,當(dāng)用戶瀏覽該頁之時,
嵌入其中Web里面的html代碼會被執(zhí)行,從而達(dá)到惡意用戶的特殊目的.
解決方案
第一。過濾
過濾 標(biāo)簽 等字符 ,但是這樣 對用戶是不公平的。
第二。用asii 碼替換
如 < > ! 等
第三 。 用 element.innerText 顯示用戶數(shù)據(jù)
這樣要寫大量的 js
第四。 使用 <xmp>
<xmp>標(biāo)簽不解析內(nèi)部的html元素,而且不執(zhí)行內(nèi)部的javascript腳本代碼
但是要防止攻擊代碼在數(shù)據(jù)中間插入</xmp>從而繞過保護(hù)
第五。通過 frame 來防止 數(shù)據(jù)頁面攻擊 主頁面
使用 document.domain 屬性 來控制
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>測試iframe的單向訪問</title>
<style>
body
{
font-size:12px;
}
</style>
</head>
<script language="javascript">
//frame1的document
var oDocument=null;
//響應(yīng)frame1的onload事件
function frame1_onload()
{
//舊的domain
var sDomainOld=document.domain;
//降級domain
document.domain="pimshell.com";
//保存frame1的document
oDocument=frame1.document;
//恢復(fù)domain
document.domain=sDomainOld;
//準(zhǔn)備就緒
button1.disabled=false;
}
//改變IFrame的背景顏色
function changebackcolor()
{
if(oDocument.body.style.backgroundColor=="")
oDocument.body.style.backgroundColor="blue";
else
oDocument.body.style.backgroundColor="";
}
</script>
<body>
為了避免XSS跨站攻擊,在大多數(shù)html編輯器的設(shè)計中,都是要將用戶輸入的HTML內(nèi)容進(jìn)行過濾。過濾代碼繁瑣暫且不說,關(guān)鍵是不能保證考慮到所有已知和未知的攻擊類型。
<br />
如果我們能設(shè)計一個iframe的單向訪問模型,就可以讓用戶輸入的HTML內(nèi)容在受控的環(huán)境中執(zhí)行,也就不需要再進(jìn)行過濾了。
<br />
舉例來說,我們html編輯器所在的主頁面為a,嵌入一個iframe為b。a可以訪問b的內(nèi)容,而b卻不能訪問a的內(nèi)容。這樣的話,b中的HTML內(nèi)容即使包含攻擊代碼,也無法發(fā)揮作用了。
<br />
<br />
<table>
<tr>
<td width="300px;" valign="top">
<iframe src="http://bb.pimshell.com/pimshell/test/b.htm" id="frame1" onload="frame1_onload();"></iframe>
<br />
<br />
<button id="button1" onclick="changebackcolor();" disabled>--> 改變IFrame的背景顏色</button>
</td>
<td valign="top">
iframe中的代碼:
<br />
<pre style="background-color:whitesmoke; border:dashed 1px black; padding:4px;">
<script language="javascript">
//domain
document.domain="pimshell.com";
//訪問主頁面試試看
function geta()
{
alert(parent.document.body.innerHTML);
}
</script>
</pre>
<br />
主頁面中的代碼:
<br />
<pre style="background-color:whitesmoke; border:dashed 1px black; padding:4px;">
<script language="javascript">
//frame1的document
var oDocument=null;
//響應(yīng)frame1的onload事件
function frame1_onload()
{
//舊的domain
var sDomainOld=document.domain;
//降級domain
document.domain="pimshell.com";
//保存frame1的document
oDocument=frame1.document;
//恢復(fù)domain
document.domain=sDomainOld;
//準(zhǔn)備就緒
button1.disabled=false;
}
//改變IFrame的背景顏色
function changebackcolor()
{
if(oDocument.body.style.backgroundColor=="")
oDocument.body.style.backgroundColor="blue";
else
oDocument.body.style.backgroundColor="";
}
</script>
</pre>
</td>
</tr></table>
</table>
</div>
</body>
</html>