程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java基於AspectJ(面向切面編程)編碼示例分享

java基於AspectJ(面向切面編程)編碼示例分享

編輯:關於JAVA

java基於AspectJ(面向切面編程)編碼示例分享。本站提示廣大學習愛好者:(java基於AspectJ(面向切面編程)編碼示例分享)文章只能為提供參考,不一定能成為您想要的結果。以下是java基於AspectJ(面向切面編程)編碼示例分享正文


該字符標識著字符串的停止,也稱作null-terminated,這個給劇本編程特別是ASP編程帶來了必定的費事,許多人能夠會問為何要保存這個特別字符,我們可以追溯到編寫操作體系的說話之一C說話,學過C/C++的童鞋能夠曉得,在字符串中標識一個字符串停止靠的就是開頭的\0(NULL或許0),不然不克不及稱作為字符串,只能說是字符串數組,任何關於字符串操作的函數假如傳入的字符串丟失落了這個停止NULL字符,都有能夠會湧現異常。


char strbuf[] = "Hello"
// 等價於
char strbuf[] = {'H', 'e', 'l', 'l', 'o', '\0'}

字符串長度的斷定函數簡略的完成之一:


size_t strlen_a(const char * str) {
size_t length = 0;
while (*str++ )
++length;
return length;
}

可以看出while輪回是以0為停止標記的,那末這裡的停止標記就是字符串開頭的\0字符。這類字符串的標識辦法可以說是有其事理的,由於C說話這類比擬底層的說話,須要的是履行的效力,並且更好的存儲空間掌握,也就是說我們關於字符串變量是須要本身控制和分派存儲字符串的空間的,普通字符串分派空間要遠弘遠於字符串的長度,而且C說話auto方法分派的變量在未初始化前是填充的渣滓值,這時候向這個空間裝入我們的字符串,只須要簡略的設置字符串最初一個為\0字符便可以了,有用防止了全部空間的操作,還有一個緣由就是輸入這個字符串時必需解釋字符串到哪裡停止,總不克不及輸入全部字符串存儲空間的值吧,呵呵,能夠說明有點牽強。

好,我們再來看為何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)繞過擴大名檢測劇本》

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved