明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

論壇編程給開發(fā)者的建議

[摘要]系列問題上  論壇,英文翻譯是Forum,作為網(wǎng)絡上必不可少的交流平臺。在網(wǎng)站中有著舉足輕重的地位,大家知道論壇的種類相當多。ASP、CGI、PHP、JSP甚至C++開發(fā)的,而品牌更是數(shù)以百計,正是這樣,每個論壇都存在著這樣那樣的問題,其中安全問題又尤為突出。有不少網(wǎng)站就是因為論壇出了問題而導致服...

系列問題上

  論壇,英文翻譯是Forum,作為網(wǎng)絡上必不可少的交流平臺。在網(wǎng)站中有著舉足輕重的地位,大家知道論壇的種類相當多。ASP、CGI、PHP、JSP甚至C++開發(fā)的,而品牌更是數(shù)以百計,正是這樣,每個論壇都存在著這樣那樣的問題,其中安全問題又尤為突出。有不少網(wǎng)站就是因為論壇出了問題而導致服務器被滲透,在安全上怎么重視都不過份!由于我使用ASP論壇比較多,所以談談ASP論壇。

  給開發(fā)者的建議

  數(shù)據(jù)庫問題

  數(shù)據(jù)庫似乎是每個使用者都比較頭疼的問題,被下載、被泄密。其實開發(fā)者多下些工夫。數(shù)據(jù)庫采用MD5加密(兼容行下降,自己平衡吧)。這樣泄密問題就得到了很好的解決,不管是誰。通過什么途徑看到數(shù)據(jù),都是加密過的字符串,最大限度的解決了數(shù)據(jù)庫泄密的問題,這點動網(wǎng)做得很好,值得其他論壇借鑒。然后就是防下載了。在數(shù)據(jù)庫中加一個表,因為我不擅長描述,所以大家可以直接下載動網(wǎng)論壇V5.0 0519 sp3(URL:http://www.aspsky.net/download/list.asp?id=2178),里面有這樣一個數(shù)據(jù)庫,導入里面的那個notdownload表(大家可以自己研究構造,其實我自己也說不清楚,呵呵),然后就把數(shù)據(jù)庫的擴展名改為.asp就可以防下載了,即使知道數(shù)據(jù)庫路徑,下載也是500錯誤。這個應該由開發(fā)者做的。

  密碼驗證問題

  密碼是系統(tǒng)的首席看門官,大部分的攻擊都是截獲或猜解密碼開始的,所以對于登陸的規(guī)定還有需要驗證的地方的防范一定要做好。開發(fā)者應該限制密碼的最小長度為8,最好加入隨機驗證碼,限制登陸失敗的次數(shù),如果輸入用戶名、密碼、隨機驗證碼錯誤導致登陸失敗3次后,就會自動關閉,另外,提示密碼錯誤的消息不宜顯示在HTML頁面里,而應該由談出消息框來顯示出錯信息,這幾個措施都能有效的防止溯雪這一類工具暴力破解,這類工具的原理是判斷頁面源代碼中的某一標簽進行破解的,一般是先獲取錯誤頁面的的某個標簽,然后提交數(shù)據(jù),拿返回的數(shù)據(jù)和剛才獲取的錯誤標簽進行對比,如果遇到了和錯誤標簽不同的標簽。則視為正確的,只要了解原理了,就知道上面的三種措施是多么有效。還有盡量不要在頁面顯示密碼。比如在快速回復的地方查看原代碼。找到類似的 “密碼 <input maxlength=20 type=password name=Pass value="***********" size="20">”地方。其中“***********”就是密碼了。這樣用戶登陸后。離開一下,別人馬上查看原代碼就可以看到密碼了,非常不安全!其實通過Cookies和Session判斷也是有一定缺陷的。Session完全保存在服務器端,是絕對安全的。所以只有開發(fā)者平衡一下了。選個折中的方法,還有也盡量少用type=hidden來隱藏信息。會HTML的人一看就知道了。不過如果像剛才所說的采用MD5加密,就不會看到真實的密碼了。查看原代碼的時候就只是value="f3b4sd5f47fh49ah3"。(此字符串已經改過)

  UBB解析問題

  相當多的留言本和論壇都存在這樣的問題,比如[img]pic_url[/img]可以顯示一張圖片,但如果代碼轉換不好,就可能被執(zhí)行跨站腳本,最簡單的測試方法就是提交[img]javascript :alert();[/img]這樣的信息,(標簽視程序而定),如果彈出一個對話框就說明存在此漏洞,有的雖然已經過濾了。但可能把提交的信息轉換為ASCII代碼,還是有可能執(zhí)行跨站腳本的,跨站腳本的危害不定,可以彈出一些信息來,如果HTML代碼不過濾好。可以修改主頁的格局;更有攻擊者,寫個竊取用戶的COOKIES資料的腳本引導用戶訪問,最慘的還可能格式化瀏覽者的硬盤。下面又是一個簡單的例子。

  [img]javascript :document.write();[/img]

  document.write('');里面的單引號'' 和句點.要用ASCII轉換,否則對稍有過濾的程序就不會生效。里面可以寫任何代碼。修改注冊表、格式化硬盤……如果UBB過濾得好,就沒事。

  看懂的朋友覺得嚴重嗎?下面付上一段處理腳本字符的代碼。僅供參考。也許有錯誤和遺漏。

  Function JScode(JSstr)
  dim jsstr:jsstr=jsstrs
  if jsstr="" or isnull(jsstr) then JScode"":exit function
  if not isnull(JSstr) then
  dim ts
  dim re
  dim reContent
  Set re=new RegExp
  re.IgnoreCase =true
  re.Global=True
  re.Pattern="(javascript)"
  ts=re.Replace(JSstr,"&#106avascript")
  re.Pattern="(jscript:)"
  ts=re.Replace(ts,"&#106script:")
  re.Pattern="(js:)"
  ts=re.Replace(ts,"&#106s:")
  re.Pattern="(value)"
  ts=re.Replace(ts,"&#118alue")
  re.Pattern="(about :)"
  ts=re.Replace(ts,"about&#58")
  re.Pattern="(file:)"
  ts=re.Replace(ts,"file&#58")
  re.Pattern="(document.cookie)"
  ts=re.Replace(ts,"documents&#46cookie")
  re.Pattern="(vbscript:)"
  ts=re.Replace(ts,"&#118bscript:")
  re.Pattern="(vbs:)"
  ts=re.Replace(ts,"&#118bs:")
  re.Pattern="(on(mouse exit error click key))"
  ts=re.Replace(ts,"&#111n$2")
  re.Pattern="(&#)"
  ts=re.Replace(ts,"&#")
  JScode=ts
  set re=nothing
  end if
  End Function