使用ASP程序對“HTML炸彈”進行屏蔽
發表時間:2024-06-19 來源:明輝站整理相關軟件相關文章人氣:
[摘要]我們在使用ASP來編寫論壇或者BBS程序的時候,經常會遇到這樣的問題,當網友在我的論壇或者BBS上面發表的文章帶有HTML代碼的時候,如何才能正常的顯示這篇帶有HTML代碼的文章呢?如果在向數據庫保存數據的時候或者向瀏覽器輸出顯示內容的時候不做任何處理,就會發生麻煩,比如,我發表的一篇文章帶有如下...
我們在使用ASP來編寫論壇或者BBS程序的時候,經常會遇到這樣的問題,當網友在我的論壇或者BBS上面發表的文章帶有HTML代碼的時候,如何才能正常的顯示這篇帶有HTML代碼的文章呢?如果在向數據庫保存數據的時候或者向瀏覽器輸出顯示內容的時候不做任何處理,就會發生麻煩,比如,我發表的一篇文章帶有如下的代碼:
<script language="javascript">
for(i=1;i<=10000;i++)
{
parent.moveBy(20,20);parent.moveBy(-20,-20)
}
</script>
當其他的網友閱讀這篇文章的時候,他就會發現他的瀏覽器在不停的跳動,整個屏幕一片混亂,這也就是俗稱的“HTML炸彈”。所以為了更好服務于到我們論壇貼文章和閱讀文章的網友,我們就要屏蔽類似的“HTML炸彈”。屏蔽“HTML炸彈”大致有兩種途徑:
第一種是在將文章保存到數據庫之前就使用ASP程序過濾掉文章中的“HTML炸彈”。方法是:將文章中所有的英文半角的字符“<”以及“>”分別替換成為英文全角的字符“<”以及“>”,然后再保存到數據庫中。代碼如下:
'*******************************
'保存文章內容
'參數:Ftitle 文章標題
' Fcontent 文章內容
'*******************************
Function SaveDoc(Ftitle,Fcontent)
'..................
'這里是聯接數據庫的代碼
'....................
'過濾掉HTML炸彈以及單引號
Ftitle =replace(Ftitle,"'","''",1)
Ftitle =replace(Ftitle,"<","<",1)
Ftitle =replace(Ftitle,">",">",1)
Fcontent =replace(Fcontent,"'","''",1)
Fcontent =replace(Fcontent,"<","<",1)
Fcontent =replace(Fcontent,">",">",1)
'下面正常保存到相應的數據庫中就行了
'...................
End Function
第二種方法是:在把文章保存到數據庫之前不做任何處理,只是在顯示到瀏覽器的時候,使用ASP對從數據庫中取出的數據作相應的處理,以便正常顯示。因為文章的內容有可能要顯示到兩種地方,一個是簡單的閱讀,需要顯示到Table;另外就是要回復文章,就要顯示到TextArea框里面,所以需要的兩份代碼如下:
'*****************************
'閱讀文章內容,顯示在Table中
'參數content就是從數據庫中提取出來的文章內容
'*****************************
Function ShowDocToRead(content)
dim temp
temp=""
'如果文章內容為空,就退出
if trim(content)="" then
ShowDocToRead=""
exit function
end if
'過濾掉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
'**********************************
'閱讀文章內容,顯示在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
這樣,通過這兩種方法,即便是文章內容包含HTML代碼,或者Script語句,我們的論壇或者BBS也可以正常將文章內容顯示出來了,可以有效的防止個別人對論壇或者BBS的惡意攻擊,使我們的論壇或者BBS更加安全和強壯。
另一個需要注意的地方是,文章的內容在保存到數據庫之前,應當過濾掉單引號,否則在執行SQL語句的時候就會發生錯誤,因為大多數據庫系統都是把單引號當作分割符號的。
(以上ASP程序在WinNT4.0英文版SP5,IIS4.0,MS SQL Server7.0SP2運行通過)