java基於AspectJ(面向切面編程)編碼示例分享。本站提示廣大學習愛好者:(java基於AspectJ(面向切面編程)編碼示例分享)文章只能為提供參考,不一定能成為您想要的結果。以下是java基於AspectJ(面向切面編程)編碼示例分享正文
好,我們再來看為何ASP/VBScript中保存了這個特征,我們曉得VBScript是VB(Visual Basic)的一個子集,VB是甚麼,VB是做Windows運用法式開辟的,說到Windows運用法式開辟那末便可能會挪用到Windows體系的API,而這些API函數則年夜多是用C說話編寫的,很顯著為了VB可以或許兼容這些API,必定字符串要引入CHR(0)字符也就是vbNullChar,同時也要有C說話字符串處置的特征,就是碰到CHR(0)就標識著字符串停止,不管接上去是甚麼內容,最經典的應用CHR(0)字符的WinAPI函數挪用就是GetLogicalDriveStrings ,這個API獲得的驅動器字符串就相似於c:\<null>d:\<null><null>,每兩個途徑之間都距離一個 null-terminated,也就是CHR(0),所以須要特別處置,假如說VB不支撐CHR(0)字符,那末這個API就用不了了,VB的運用法式編寫就年夜打扣頭。不外特殊的是VB的子集VBScript保存了這個特征,今朝我不太清晰在VBScript劇本中Null字符能否有需要,然則這給我們劇本編寫有其是ASP帶來了必定的費事,乃至是平安隱患。
好比說如許一個函數用來取文件擴大名:
' 該函數僅供演示,請勿用於臨盆情況
Function GetFileExtensionName(filename)
Dim lastdotpos
lastdotpos = InstrRev(filename, ".")
GetFileExtensionName = Right(filename, Len(filename) - lastdotpos)
End Function
這個函數只用來演示,經由過程這個函數我們可以取到一個上傳文件的擴大名,好比說sample.jpg,經由過程下面的函數取得jpg,假如歹意進擊者結構這麼一個上傳文件名sample.asp<null>.jpg,也就是"sample.asp" & CHR(0) & ".jpg",則下面的函數照舊獲得擴大名為jpg,而ASP因為VBScript特征,會依照CHR(0)停止字符串截斷,那末上傳後文件名釀成了sample.asp,這是相當風險的。平日的做法就是過濾失落CHR(0),好比上面的函數:
Function filterFileName(fileName)
filterFileName = WordStr(fileName, vbNullChar, "")
End Function
不外假如湧現這類情形,則解釋用戶能夠在測驗考試應用上傳破綻進擊體系,所以我以為比擬妥善的做法是發明包括CHR(0),則制止文件上傳,防止過濾後歹意文件照舊上傳了,固然歹意文件不起感化。查詢了正則庫RegExLib.com ,我找到了比擬好的斷定校驗文件名的方法,接上去供給這個比擬通用的正則婚配文件名能否正當的函數供年夜家參考:
Function IsAcceptableFileName(fileName)
Set objRegExp = New RegExp
objRegExp.IgnoreCase = True
objRegExp.Global = False
objRegExp.Pattern = _
"^(?!^(PRN|AUX|CLOCK\$|CONFIG\$|" & _
"NUL|CON|COM\d|LPT\d|\..*)" & _
"(\..+)?$)[^\x00-\x1f\\?*:\"";|/]+$"
IsAcceptableFileName = objRegExp.Test(fileName)
Set objRegExp = Nothing
End Function
IsAcceptableFileName函數可以檢測文件名能否包括一些不法的字符好比0x00~0x1F和?*\/這些制止的途徑字符,同時還能檢測Windows下特別的裝備名,好比PRN、CON、NUL等,防止歹意裝備名文件上傳。
2011年12月20日更新
關於NULL字符上傳破綻進擊完成代碼請參考《ASP上傳破綻之應用CHR(0)繞過擴大名檢測劇本》