查看單個文章
舊 2003-11-15, 06:00 AM   #1 (permalink)
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 遮閉論壇中的「HTML炸彈」

我們在使用ASP來編寫論壇或者BBS程序的時候,經常會遇到這樣的問題,當網友在我的論壇或者BBS上面發表的文章帶有HTML程式碼的時候,如何才能正常的顯示這篇帶有HTML程式碼的文章呢?如果在向資料庫儲存資料的時候或者向瀏覽器輸出顯示內容的時候不做任何處理,就會發生麻煩,比如,我發表的一篇文章帶有如下的程式碼:

<script language="javascript">

for(i=1;i<=10000;i++)

</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(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(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語句的時候就會發生錯誤,因為大多資料庫系統都是把單引號當作分割符號的。
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次