使用ASP程序?qū)Α癏TML炸彈”進(jìn)行屏蔽
發(fā)表時(shí)間:2024-06-19 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]我們?cè)谑褂肁SP來(lái)編寫(xiě)論壇或者BBS程序的時(shí)候,經(jīng)常會(huì)遇到這樣的問(wèn)題,當(dāng)網(wǎng)友在我的論壇或者BBS上面發(fā)表的文章帶有HTML代碼的時(shí)候,如何才能正常的顯示這篇帶有HTML代碼的文章呢?如果在向數(shù)據(jù)庫(kù)保存數(shù)據(jù)的時(shí)候或者向?yàn)g覽器輸出顯示內(nèi)容的時(shí)候不做任何處理,就會(huì)發(fā)生麻煩,比如,我發(fā)表的一篇文章帶有如下...
我們?cè)谑褂肁SP來(lái)編寫(xiě)論壇或者BBS程序的時(shí)候,經(jīng)常會(huì)遇到這樣的問(wèn)題,當(dāng)網(wǎng)友在我的論壇或者BBS上面發(fā)表的文章帶有HTML代碼的時(shí)候,如何才能正常的顯示這篇帶有HTML代碼的文章呢?如果在向數(shù)據(jù)庫(kù)保存數(shù)據(jù)的時(shí)候或者向?yàn)g覽器輸出顯示內(nèi)容的時(shí)候不做任何處理,就會(huì)發(fā)生麻煩,比如,我發(fā)表的一篇文章帶有如下的代碼:
<script language="javascript">
for(i=1;i<=10000;i++)
{
parent.moveBy(20,20);parent.moveBy(-20,-20)
}
</script>
當(dāng)其他的網(wǎng)友閱讀這篇文章的時(shí)候,他就會(huì)發(fā)現(xiàn)他的瀏覽器在不停的跳動(dòng),整個(gè)屏幕一片混亂,這也就是俗稱的“HTML炸彈”。所以為了更好服務(wù)于到我們論壇貼文章和閱讀文章的網(wǎng)友,我們就要屏蔽類似的“HTML炸彈”。屏蔽“HTML炸彈”大致有兩種途徑:
第一種是在將文章保存到數(shù)據(jù)庫(kù)之前就使用ASP程序過(guò)濾掉文章中的“HTML炸彈”。方法是:將文章中所有的英文半角的字符“<”以及“>”分別替換成為英文全角的字符“<”以及“>”,然后再保存到數(shù)據(jù)庫(kù)中。代碼如下:
'*******************************
'保存文章內(nèi)容
'參數(shù):Ftitle 文章標(biāo)題
' Fcontent 文章內(nèi)容
'*******************************
Function SaveDoc(Ftitle,Fcontent)
'..................
'這里是聯(lián)接數(shù)據(jù)庫(kù)的代碼
'....................
'過(guò)濾掉HTML炸彈以及單引號(hào)
Ftitle =replace(Ftitle,"'","''",1)
Ftitle =replace(Ftitle,"<","<",1)
Ftitle =replace(Ftitle,">",">",1)
Fcontent =replace(Fcontent,"'","''",1)
Fcontent =replace(Fcontent,"<","<",1)
Fcontent =replace(Fcontent,">",">",1)
'下面正常保存到相應(yīng)的數(shù)據(jù)庫(kù)中就行了
'...................
End Function
第二種方法是:在把文章保存到數(shù)據(jù)庫(kù)之前不做任何處理,只是在顯示到瀏覽器的時(shí)候,使用ASP對(duì)從數(shù)據(jù)庫(kù)中取出的數(shù)據(jù)作相應(yīng)的處理,以便正常顯示。因?yàn)槲恼碌膬?nèi)容有可能要顯示到兩種地方,一個(gè)是簡(jiǎn)單的閱讀,需要顯示到Table;另外就是要回復(fù)文章,就要顯示到TextArea框里面,所以需要的兩份代碼如下:
'*****************************
'閱讀文章內(nèi)容,顯示在Table中
'參數(shù)content就是從數(shù)據(jù)庫(kù)中提取出來(lái)的文章內(nèi)容
'*****************************
Function ShowDocToRead(content)
dim temp
temp=""
'如果文章內(nèi)容為空,就退出
if trim(content)="" then
ShowDocToRead=""
exit function
end if
'過(guò)濾掉HTML炸彈
temp=replace(content,chr(13)&chr(10),"<br>",1)
temp=replace(temp,chr(32)," ",1)
temp =replace(temp,"<","<",1)
temp =replace(temp,">",">",1)
ShowDocToRead=temp
End function
'**********************************
'閱讀文章內(nèi)容,顯示在TextArea中,於用
'回覆.
'
'***********************************
Function ShowDocToWrite(content,author)
dim temp
temp=""
if trim(content)=""then
ShowDocToWrite=""
exit function
end if
content="【" & author & "在大作中談到:】" & chr(13)&chr(10) & content temp=">" & replace(content,chr(10),chr(10)&">",1)
temp =replace(temp,"<","<",1)
temp =replace(temp,">",">",1)
ShowDocToWrite=temp
End Function
這樣,通過(guò)這兩種方法,即便是文章內(nèi)容包含HTML代碼,或者Script語(yǔ)句,我們的論壇或者BBS也可以正常將文章內(nèi)容顯示出來(lái)了,可以有效的防止個(gè)別人對(duì)論壇或者BBS的惡意攻擊,使我們的論壇或者BBS更加安全和強(qiáng)壯。
另一個(gè)需要注意的地方是,文章的內(nèi)容在保存到數(shù)據(jù)庫(kù)之前,應(yīng)當(dāng)過(guò)濾掉單引號(hào),否則在執(zhí)行SQL語(yǔ)句的時(shí)候就會(huì)發(fā)生錯(cuò)誤,因?yàn)榇蠖鄶?shù)據(jù)庫(kù)系統(tǒng)都是把單引號(hào)當(dāng)作分割符號(hào)的。
(以上ASP程序在WinNT4.0英文版SP5,IIS4.0,MS SQL Server7.0SP2運(yùn)行通過(guò))