人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng) > 網(wǎng)絡(luò)技術(shù)教程 > 詳細(xì)頁面

完善網(wǎng)站程序 腳本攻擊防范策略完全篇

完善網(wǎng)站程序 腳本攻擊防范策略完全篇

更新時間:2020-12-27 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

網(wǎng)絡(luò)技術(shù)是從1990年代中期發(fā)展起來的新技術(shù),它把互聯(lián)網(wǎng)上分散的資源融為有機(jī)整體,實現(xiàn)資源的全面共享和有機(jī)協(xié)作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計算機(jī)、存儲資源、數(shù)據(jù)資源、信息資源、知識資源、專家資源、大型數(shù)據(jù)庫、網(wǎng)絡(luò)、傳感器等。 當(dāng)前的互聯(lián)網(wǎng)只限于信息共享,網(wǎng)絡(luò)則被認(rèn)為是互聯(lián)網(wǎng)發(fā)展的第三階段。
近來,網(wǎng)絡(luò)上的SQL Injection 漏洞利用攻擊,JS腳本,HTML腳本攻擊似乎逾演逾烈。陸續(xù)的很多站點都被此類攻擊所困擾,并非像主機(jī)漏洞那樣可以當(dāng)即修復(fù),來自于WEB的攻擊方式使我們在防范或者是修復(fù)上都帶來了很大的不便。HOOO...... 一個站長最大的痛苦莫過于此。自己的密碼如何如何強(qiáng)壯卻始終被攻擊者得到,但如何才能做到真正意義上的安全呢?第一,別把密碼和你的生活聯(lián)系起來;第二,Supermaster的PWD最好只有你自己知道;第三,絕對要完善好你的網(wǎng)站程序。然而怎樣才能完善,這將是我們此文的最終目 的。

  安全防護(hù),如何做到安全防護(hù)?想要防護(hù)就要知道對方是如何進(jìn)行攻擊。有很多文章都在寫如何攻下某站點,其實其攻擊的途徑也不過是以下幾種:

  1. 簡單的腳本攻擊

  此類攻擊應(yīng)該屬于無聊搗亂吧。比如****:alert(); </table>等等,由于程序上過濾的不嚴(yán)密,使攻擊者既得不到什么可用的,但又使的他可以進(jìn)行搗亂的目的。以目前很多站點的免費服務(wù),或者是自身站點的程序上也是有過濾不嚴(yán)密的問題。

  2. 危險的腳本攻擊

  這類腳本攻擊已經(jīng)過度到可以竊取管理員或者是其他用戶信息的程度上了。比如大家都知道的cookies竊取,利用腳本對客戶端進(jìn)行本地的寫操作等等。

  3. Sql Injection 漏洞攻擊

  可以說,這個攻擊方式是從動網(wǎng)論壇和BBSXP開始的。利用SQL特殊字符過濾的不嚴(yán)密,而對數(shù)據(jù)庫進(jìn)行跨表查詢的攻擊。比如:

  http://127.0.0.1/forum/showuser.asp?id=999 and 1=1
  http://127.0.0.1/forum/showuser.asp?id=999 and 1=2
  http://127.0.0.1/forum/showuser.asp?id=999 and 0<>(select count(*) from admin)
  http://127.0.0.1/forum/showuser.asp?id=999'; declare @a sysname set @a='xp_'+
  'cmdshell' exec @a 'dir c:'---&aid=9

  得到了管理員的密碼也就意味著已經(jīng)控制的整站,雖然不一定能得到主機(jī)的權(quán)限,但也為這一步做了很大的鋪墊。類似的SQL Injection攻擊的方式方法很多,對不同的文件過濾不嚴(yán)密所采取的查詢方式也不同。所以說想做好一個完整的字符過濾程序不下一凡功夫是不可能的。

  4. 遠(yuǎn)程注入攻擊

  某站點的所謂的過濾只是在提交表格頁上進(jìn)行簡單的JS過濾。對于一般的用戶來說,你大可不必防范;對早有預(yù)謀的攻擊者來說,這樣的過濾似乎根本沒作用。我們常說的POST攻擊就是其中一例。通過遠(yuǎn)程提交非法的信息以達(dá)到攻擊目的。

  通過上面的攻擊方法的介紹,我們大致的了解了攻擊者的攻擊途徑,下面我們就開始重點的介紹,如何有效的防范腳本攻擊!


[page_break]序體(3)

  有了上面的過濾函數(shù)您可以在任何需要過濾的地方應(yīng)用過濾函數(shù)直接使用就可以了。這就使我們的修復(fù)工作大大的簡化了。

  另外,我想在這里再次多提醒一下,一些站點的UBB在進(jìn)行小的表情圖標(biāo)轉(zhuǎn)化時也會出現(xiàn)過濾問題,由于很隱蔽所以不容易發(fā)現(xiàn):

  如:

  我們標(biāo)簽內(nèi)的文字進(jìn)行修改,

  不知道各位看懂沒,前一個單引號用來中和程序提供的左引號,第二個單引號用來中和閉合的右引號,這樣程序輸出就為:

<img src='http://edu.chinaz.com/Get/Security/Defence/img/0001.gif' onerror=****:alert(); alt=''>

  

  如果圖片不存在,那么將激活onerror標(biāo)簽執(zhí)行腳本程序。對于已經(jīng)過濾了單引號的站點在這里用雙引號一樣可以完成。對于過濾了****字段的,只用alert()也完全可以。所以說要過濾就要過濾完全,別給攻擊者留下一絲機(jī)會。

  防范SQL Injection 漏洞攻擊

  可以這樣說,這里似乎是整篇文章的重點了.SQL Injection 漏洞攻擊的的多樣化也使得我們在程序防護(hù)上不得不想的更多一些。面對SQL Injection 的強(qiáng)大"攻勢",我們到底該過濾哪些?

  一些常用的危險字符有

  ' 數(shù)據(jù)庫字段判別封閉

  -- 某些數(shù)據(jù)庫注釋標(biāo)志

  # 某些數(shù)據(jù)庫注釋標(biāo)志

  " 可能導(dǎo)致程序出錯

  \ 跨越目錄

  3221143836nicode編碼的特征字符

  $ 可能用于變量標(biāo)注

  / 和\ 一樣

  NULL 小心"空"錄入的危險,可能導(dǎo)致數(shù)據(jù)庫或系統(tǒng)處理報錯,利用報錯構(gòu)造溢出.

  空格和'一起,構(gòu)造sql injeciton

  ? = & 如果存在二次參數(shù)傳遞,可能改寫querystr。

  (1) 從最一般的.SQL Injection 漏洞攻擊來看:用戶名和密碼上的過濾問題,如:

  提交:用戶名為:'or''=' 用戶密碼為:'or''='

  從程序出發(fā),我們完全可以得出,數(shù)據(jù)庫在執(zhí)行以下操作

  Sql=" SELECT * FROM lUsers WHERE Username=''or''='' and Password = ''or''=''"

  這樣一來,這樣,SQL 服務(wù)器將返回 lUsers 表格中的所有記錄,而 ASP 腳本將會因此而誤認(rèn)為攻擊者的輸入符合 lUsers 表格中的第一條記錄,從而允許攻擊者以該用戶的名義登入網(wǎng)站。對此類注入的防范似乎簡單的很:

  利用以下程序就可以實現(xiàn),程序體(4)

  strUsername = Replace(Request.Form("Username"), "''", "''''")

  strPassword = Replace(Request.Form("Password"), "''", "''''")

  程序體(4)

  (2)杜絕SQL 注入式攻擊的第一步就是采用各種安全手段監(jiān)控來自 ASP request 對象 (Reques、Request.QueryString、Request.Form、Request.Cookies和 Request.ServerVariables) 的用戶輸入,以確保 SQL 指令的可靠性。具體的安全手段根據(jù)你的 DBMS 而異。

  SQL 注入式攻擊可能引起的危害取決于該網(wǎng)站的軟件環(huán)境和配置。當(dāng) Web 服務(wù)器以操作員(dbo)的身份訪問數(shù)據(jù)庫時,利用SQL注入式攻擊就可能刪除所有表格、創(chuàng)建新表格,等等。當(dāng)服務(wù)器以超級用戶 (sa) 的身份訪問數(shù)據(jù)庫時,利用SQL注入式攻擊就可能控制整個 SQL 服務(wù)器;在某些配置下攻擊者甚至可以自行創(chuàng)建用戶帳號以完全操縱數(shù)據(jù)庫所在的 Windows 服務(wù)器。

  如:

http://127.0.0.1/forum/showuser.asp?id=999';declare @a sysname set @a='xp_'+

'cmdshell' exec @a 'dir c:'--&aid=9

http://127.0.0.1/forum/showuser.asp?id=999'; declare @a sysname set @a='xp'+

'_cm'+'dshell' exec @a 'dir c:'--&aid=9

  甚至可以執(zhí)行像:net user fqy fqy /add 這樣的指令.當(dāng)然這就需要你當(dāng)前的運行身份必須是Sa,或者你攻擊的只是一臺虛擬主機(jī),我勸你還是就此打住.

  對于一些整機(jī)使用的站點來說防止通過80端口攻擊而直接拿到整機(jī)管理權(quán)限,這一點就變得至關(guān)重要了。對xp_cmdshell 的過濾就成為首要,很多站點的程序都是用GET或者是GET與POST混合來提交數(shù)據(jù)的,對于此,我們給出一種防止GET進(jìn)行SQL注入的程序:如程序體(5)

fqys=request.servervariables("query_string")

dim nothis(18)

nothis(0)="net user"

nothis(1)="xp_cmdshell"

nothis(2)="/add"

nothis(3)="exec%20master.dbo.xp_cmdshell"

nothis(4)="net localgroup administrators"

nothis(5)="select"

nothis(6)="count"

nothis(7)="asc"

nothis(8)="char"

nothis(9)="mid"

nothis(10)="'"

nothis(11)=":"

nothis(12)=""""

nothis(13)="insert"

nothis(14)="delete"

nothis(15)="drop"

nothis(16)="truncate"

nothis(17)="from"

nothis(18)="%"

errc=false

for i= 0 to ubound(nothis)

if instr(FQYs,nothis(i))<>0 then

errc=true

end if

next

if errc then

response.write " "

response.end

end if


[page_break]程序體(5)

  我要做點聲明的是:以上的程序只是對GET方式提交的數(shù)據(jù)進(jìn)行的過濾,千萬不要盲目套用。

  像其他一些來自 ASP request 對象 (Reques、Request.QueryString、Request.Form、Request.Cookies和 Request.ServerVariables) 的用戶輸入的攻擊方法的方法,大致都集中在腳本期望的輸入變量是數(shù)字變量 (ID) 上,當(dāng)然我們不能只看數(shù)字變量,比如:

http://127.0.0.1/systembbs/showtopic.asp?tid=99&name=abc' and left(userpasswor

d,1)='a

http://127.0.0.1/systembbs/addtopic.asp?tid=99&name=abc' and userpasswor

d='or''='

  另外,如何單一的防止類似這樣的注入錯誤?

http://127.0.0.1/systembbs/addtopic.asp?tid=99' ;delete forum_forum;--&page=33

  防范程序: 程序體(6)

......addtopic.asp?action=add......

......addtopic.asp?action=delect......

Action1=trim(Request.QueryString())
if left(action1,7)<>"action=" then '限定querystring必須為 action=
error(err01)'錯誤處理
else
action=Request.querystring("action")'取得querystring的值
end if
select case action'對querystring進(jìn)行處理
case "add"
.....
case "delete"
......
case else '如果querystring沒有這個值則進(jìn)行錯誤處理
error(err02)
end select

  程序體(6)

  出現(xiàn)這樣的攻擊,使我們的站長們不得不又再次頭痛,這里我可以給出大家一個解決最好辦法,一般的來說,用戶名長度字符數(shù)不會超過15個字符,大都為14字符。那么我們從長度出發(fā),來進(jìn)行過濾:如程序體(7)

Name=replace(name,"'","")

If len(name)>16 then

Response.write " 你要做什么?"

Response.end

End if

  程序體(7)

  為什么我們這里以及過濾了單引號,怎么還要再次取一個長度限制呢?不多說了,看看4ngel的文章先<<饒過'限制繼續(xù)射入>> .別問我怎么轉(zhuǎn)數(shù)字格式,我不會,嘿嘿...^_^!

  還繼續(xù)回到我們的主題," 腳本期望的輸入變量是數(shù)字變量 (ID)".怎樣進(jìn)行注入防范,天吶,方法太多了,最直接的就是判斷是否是數(shù)字整型,還有一些比較個性的驗證辦法,我們一一介紹一下 如:程序體(8)

  一,判斷數(shù)字是否是整型

  p_lngID = CLng(Request("ID"))

  二 取字長 這一點我相信一般的數(shù)據(jù)長度不會大于8位所以:

If len(ID)>8 then

response.write "bedpost"

response end

end if

  三 我認(rèn)為這是一種比較冒險的辦法,就是再進(jìn)行一次數(shù)據(jù)庫的查詢,如果數(shù)據(jù)庫表內(nèi)沒有相同的值與之相同那么返回錯誤.

sql = "SELECT NAME FROM Category where ID="&ID

set temp=conn.Execute(SQL)

if temp.bof or temp.eof then

response.Redirect("index.asp")

else

cat_name=temp("name")

end if

set temp=nothing

‘上面的是數(shù)據(jù)ID 的檢測,下面則是正式的查詢

sql = "SELECT ID T_ID, NAME FROM Category where ID="&ID&" ORDER BY xh asc"

rs.open sql,conn,1,1

  四,我自己常用的數(shù)據(jù)過濾腳本,專利,呵~

id=replace(id,"'","")

If len( request("id"))>8 then ‘ 為什么取長度上面程序中已經(jīng)說明

response.write " "

response.end

else

If request("id")<>"" then ‘取不為空則是為了防止一些程序頁中會出現(xiàn)空值情況,如果不在這里做判斷,程序會校驗出錯.

If IsNumeric(request("id"))=False then ' 風(fēng)清揚修改 ID數(shù)據(jù)監(jiān)控程式

response.write " "

response.end

end if

end if

end if


[page_break]ASP木馬

  已經(jīng)講到這里了,再提醒各位論壇站長一句,小心你們的文件上傳:為什么論壇程序被攻破后主機(jī)也隨之被攻擊者占據(jù)。原因就在......對!ASP木馬!一個絕對可惡的東西。病毒么?非也.把個文件隨便放到你論壇的程序中,您老找去吧。不吐血才怪哦。如何才能防止ASP木馬被上傳到服務(wù)器呢?方法很簡單,如果你的論壇支持文件上傳,請設(shè)定好你要上傳的文件格式,我不贊成使用可更改的文件格式,直接從程序上鎖定,只有圖象文件格式,和壓縮文件就完全可以,多給自己留點方便也就多給攻擊者留點方便。怎么判斷格式,我這里收集了一個,也改出了一個,大家可以看一下: 程序體(10)

  '判斷文件類型是否合格

Private Function CheckFileExt (fileEXT)

dim Forumupload

Forumupload="gif,jpg,bmp,jpeg"

Forumupload=split(Forumupload,",")

for i=0 to ubound(Forumupload)

if lcase(fileEXT)=lcase(trim(Forumupload(i))) then

CheckFileExt=true

exit Function

else

CheckFileExt=false

end if

next

End Function

  ‘驗證文件內(nèi)容的合法性

set MyFile = server.CreateObject ("Scripting.FileSystemObject")

set MyText = MyFile.OpenTextFile (sFile, 1) ' 讀取文本文件

sTextAll = lcase(MyText.ReadAll): MyText.close

'判斷用戶文件中的危險操作

sStr ="8|.getfolder|.createfolder|.deletefolder|.createdirectory|

.deletedirectory"

sStr = sStr & "|.saveas|wscript.shell|script.encode"

sNoString = split(sStr,"|")

for i = 1 to sNoString(0)

if instr(sTextAll, sNoString(i)) <> 0 then

sFile = Upl.Path & sFileSave: fs.DeleteFile sFile

Response.write "<center><br><big>"& sFileSave &"文件中含有與操作目錄等有關(guān)的命令"&_

"<br><font color=red>"& mid(sNoString(i),2) &"</font>,為了安全原因,<b>不能上傳。<b>"&_

"</big></center></html>"

Response.end

end if

next

  程序體(10)

  把他們加到你的上傳程序里做一次驗證,那么你的上傳程序安全性將會大大提高.

  什么?你還不放心?拿出殺手锏,請你的虛擬主機(jī)服務(wù)商來幫忙吧。登陸到服務(wù)器,將PROG ID 中的"shell.application"項和"shell.application.1"項改名或刪除。再將"WSCRIPT.SHELL"項和"WSCRIPT.SHELL.1"這兩項都要改名或刪除。呵呵,我可大膽的說,國內(nèi)可能近半以上的虛擬主機(jī)都沒改過。只能慶幸你們的用戶很合作,否則......我刪,我刪,我刪刪刪......

  小結(jié)

  如何更好的達(dá)到防范SQL Injection的攻擊?這里我個人給推薦幾個辦法,第一,免費程序不要真的就免費用,既然你可以共享原碼,那么攻擊者一樣可以分析代碼。如果有能力的站長最好還是更改一下數(shù)據(jù)庫表名,字段名,只修改關(guān)鍵的admin, username, password就可以了,比如forum_upasswd 這樣的字段名誰能猜到?如果你猜到了,最好趕快去買彩票吧,特等獎不是你還會有誰呢?另外,一般站點的關(guān)鍵就在于管理員的密碼,很好的保護(hù)好你的管理員密碼那是至關(guān)重要的,至少10位的數(shù)字字母組合。另外加上現(xiàn)在大多數(shù)站點程序都會使用MD5來加密用戶密碼,加上你密碼的強(qiáng)壯性,那樣你站點的安全性就大大的提高了。即使出現(xiàn)了SQL Injection漏洞,攻擊者也不可能馬上拿下你的站點。



網(wǎng)絡(luò)的神奇作用吸引著越來越多的用戶加入其中,正因如此,網(wǎng)絡(luò)的承受能力也面臨著越來越嚴(yán)峻的考驗―從硬件上、軟件上、所用標(biāo)準(zhǔn)上......,各項技術(shù)都需要適時應(yīng)勢,對應(yīng)發(fā)展,這正是網(wǎng)絡(luò)迅速走向進(jìn)步的催化劑。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 瓮安县| 白朗县| 包头市| 商都县| 板桥市| 丰台区| 洪洞县| 怀柔区| 全州县| 临泉县| 阜城县| 拜泉县| 万荣县| 神木县| 布尔津县| 澜沧| 大石桥市| 宝清县| 南澳县| 永泰县| 榆林市| 阿巴嘎旗| 奈曼旗| 榆树市| 枣阳市| 罗城| 明溪县| 天峨县| 巴青县| 巴林左旗| 广水市| 伊吾县| 宁夏| 平阴县| 大姚县| 阿克苏市| 延边| 淳化县| 黔东| 余庆县| 柳州市|