根據(jù)運(yùn)行的環(huán)境,操作系統(tǒng)可以分為桌面操作系統(tǒng),手機(jī)操作系統(tǒng),服務(wù)器操作系統(tǒng),嵌入式操作系統(tǒng)等。 原始鏈接: SQL特殊字符轉(zhuǎn)義 應(yīng)該說,即使不處理HTML或JavaScript中的特殊字符,也不會帶來災(zāi)難性的后果. 但是sql 特殊字符 @,如果在動態(tài)構(gòu)造SQL語句時(shí)不處理變量中的特殊字符,則可能導(dǎo)致程序漏洞和數(shù)據(jù)嚴(yán)重的安全問題,例如盜竊和數(shù)據(jù)破壞. 互聯(lián)網(wǎng)上有大量解釋SQL注入的文章,有興趣的讀者可以搜索相關(guān)材料進(jìn)行深入研究. 盡管SQL注入的后果非常嚴(yán)重,但只要動態(tài)構(gòu)造的SQL語句的變量使用特殊字符進(jìn)行轉(zhuǎn)義,就可以避免此問題. 讓我們看一個(gè)安全漏洞的經(jīng)典示例: SELECT COUNT(userId) 上述SQL語句根據(jù)返回的結(jié)果數(shù)判斷用戶提供的登錄信息是否正確. 如果將userName變量直接合并到SQL語句中而不進(jìn)行特殊字符轉(zhuǎn)義處理sql 特殊字符 @,則黑客可以繞過用戶名/密碼檢查,將userName設(shè)置為“ 1”或“ 1” =“ 1”,然后直接進(jìn)入系統(tǒng). 除非必要,通常建議通過PreparedStatement參數(shù)綁定構(gòu)造動態(tài)SQL語句,因?yàn)榇朔椒ǹ梢员苊鉂撛诘腟QL注入安全問題. 但是,通常很難通過在應(yīng)用程序中串聯(lián)字符串來完全避免構(gòu)造動態(tài)SQL語句. 為了防止其他人使用特殊的SQL字符破壞SQL語句結(jié)構(gòu)或植入惡意操作,必須在將變量拼??接到SQL語句之前對特殊字符進(jìn)行轉(zhuǎn)義. Spring沒有提供相應(yīng)的工具類. 您可以在jakarta commons lang包(spring / lib / jakarta-commons / commons-lang.jar)中使用StringEscapeUtils完成這項(xiàng)工作: 清單4. SqlEscapeExample
實(shí)際上,StringEscapeUtils不僅提供SQL特殊字符轉(zhuǎn)義處理功能,而且還提供HTML,XML,JavaScript,Java特殊字符轉(zhuǎn)義和還原方法. 如果您不介意介紹jakarta commons lang類程序包,建議您使用StringEscapeUtils實(shí)用程序類來完成特殊字符轉(zhuǎn)義處理的工作.
|
溫馨提示:喜歡本站的話,請收藏一下本站!