明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

使用ASP程序?qū)Α癏TML炸彈”進(jì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),"&nbsp;",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ò))