數(shù)據(jù)庫(kù)查詢中遭遇特殊字符導(dǎo)致問(wèn)題的解決方法
更新時(shí)間:2007年12月20日 22:12:42 作者:
數(shù)據(jù)庫(kù)查詢中遭遇特殊字符導(dǎo)致問(wèn)題的解決方法,我們提供的是asp的,但其它的數(shù)據(jù)庫(kù)與語(yǔ)言下的解決方法也大同小異。
數(shù)據(jù)庫(kù)查詢中的特殊字符的問(wèn)題
在進(jìn)行數(shù)據(jù)庫(kù)的查詢時(shí),會(huì)經(jīng)常遇到這樣的情況:
例如想在一個(gè)用戶數(shù)據(jù)庫(kù)中查詢他的用戶名和他的密碼,但恰好該用戶使用的名字和密碼中有特殊的
字符,例如單引號(hào),“|”號(hào),雙引號(hào)或者連字符“&”。
例如他的名字是1"test,密碼是A|&900
這時(shí)當(dāng)你執(zhí)行以下的查詢語(yǔ)句時(shí),肯定會(huì)報(bào)錯(cuò):
SQL = "SELECT * FROM SecurityLevel WHERE UID="" & UserID & """
SQL = SQL & " AND PWD="" & Password & """
因?yàn)槟愕腟QL將會(huì)是這樣:
SELECT * FROM SecurityLevel WHERE UID="1"test" AND PWD="A|&900"
在SQL中,"|"為分割字段用的,顯然會(huì)出錯(cuò)了。現(xiàn)在提供下面的幾個(gè)函數(shù)專門用來(lái)處理這些頭疼的東西數(shù)據(jù)庫(kù) 轉(zhuǎn)義字符:
Function ReplaceStr (TextIn, ByVal SearchStr As String, _
ByVal Replacement As String, _
ByVal CompMode As Integer)
Dim WorkText As String, Pointer As Integer
If IsNull(TextIn) Then
ReplaceStr = Null
Else
WorkText = TextIn
Pointer = InStr(1, WorkText, SearchStr, CompMode)
Do While Pointer > 0
WorkText = Left(WorkText, Pointer - 1) & Replacement & _
Mid(WorkText, Pointer + Len(SearchStr))
Pointer = InStr(Pointer + Len(Replacement), WorkText, SearchStr, CompMode)
Loop
ReplaceStr = WorkText
End If
End Function
Function SQLFixup(TextIn)
SQLFixup = ReplaceStr(TextIn, """, """", 0)
End Function
Function JetSQLFixup(TextIn)
Dim Temp
Temp = ReplaceStr(TextIn, """, """", 0)
JetSQLFixup = ReplaceStr(Temp, "|", "" & chr(124) & "", 0)
End Function
Function FindFirstFixup(TextIn)
Dim Temp
Temp = ReplaceStr(TextIn, """, "" & chr(39) & "", 0)
FindFirstFixup = ReplaceStr(Temp, "|", "" & chr(124) & "", 0)
End Function
有了上面幾個(gè)函數(shù)后,當(dāng)你在執(zhí)行一個(gè)sql前,請(qǐng)先使用
SQL = "SELECT * FROM SecurityLevel WHERE UID="" & SQLFixup(UserID) & """
SQL = SQL & " AND PWD="" & SQLFixup(Password) & """
在進(jìn)行數(shù)據(jù)庫(kù)的查詢時(shí),會(huì)經(jīng)常遇到這樣的情況:
例如想在一個(gè)用戶數(shù)據(jù)庫(kù)中查詢他的用戶名和他的密碼,但恰好該用戶使用的名字和密碼中有特殊的
字符,例如單引號(hào),“|”號(hào),雙引號(hào)或者連字符“&”。
例如他的名字是1"test,密碼是A|&900
這時(shí)當(dāng)你執(zhí)行以下的查詢語(yǔ)句時(shí),肯定會(huì)報(bào)錯(cuò):
SQL = "SELECT * FROM SecurityLevel WHERE UID="" & UserID & """
SQL = SQL & " AND PWD="" & Password & """
因?yàn)槟愕腟QL將會(huì)是這樣:
SELECT * FROM SecurityLevel WHERE UID="1"test" AND PWD="A|&900"
在SQL中,"|"為分割字段用的,顯然會(huì)出錯(cuò)了。現(xiàn)在提供下面的幾個(gè)函數(shù)專門用來(lái)處理這些頭疼的東西數(shù)據(jù)庫(kù) 轉(zhuǎn)義字符:
復(fù)制代碼 代碼如下:
Function ReplaceStr (TextIn, ByVal SearchStr As String, _
ByVal Replacement As String, _
ByVal CompMode As Integer)
Dim WorkText As String, Pointer As Integer
If IsNull(TextIn) Then
ReplaceStr = Null
Else
WorkText = TextIn
Pointer = InStr(1, WorkText, SearchStr, CompMode)
Do While Pointer > 0
WorkText = Left(WorkText, Pointer - 1) & Replacement & _
Mid(WorkText, Pointer + Len(SearchStr))
Pointer = InStr(Pointer + Len(Replacement), WorkText, SearchStr, CompMode)
Loop
ReplaceStr = WorkText
End If
End Function
Function SQLFixup(TextIn)
SQLFixup = ReplaceStr(TextIn, """, """", 0)
End Function
Function JetSQLFixup(TextIn)
Dim Temp
Temp = ReplaceStr(TextIn, """, """", 0)
JetSQLFixup = ReplaceStr(Temp, "|", "" & chr(124) & "", 0)
End Function
Function FindFirstFixup(TextIn)
Dim Temp
Temp = ReplaceStr(TextIn, """, "" & chr(39) & "", 0)
FindFirstFixup = ReplaceStr(Temp, "|", "" & chr(124) & "", 0)
End Function
有了上面幾個(gè)函數(shù)后,當(dāng)你在執(zhí)行一個(gè)sql前,請(qǐng)先使用
SQL = "SELECT * FROM SecurityLevel WHERE UID="" & SQLFixup(UserID) & """
SQL = SQL & " AND PWD="" & SQLFixup(Password) & """
相關(guān)文章
SQL注入技巧之顯注與盲注中過(guò)濾逗號(hào)繞過(guò)詳析
SQL注入的繞過(guò)技巧有很多,下面這篇文章主要給大家介紹了關(guān)于SQL注入技巧之顯注與盲注中過(guò)濾逗號(hào)繞過(guò)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08
如何用DeepSeek獲取數(shù)據(jù)庫(kù)中的表信息(表名和字段名稱)
這篇文章主要介紹了如何利用DeepSeek模型結(jié)合數(shù)據(jù)庫(kù)查詢,自動(dòng)生成表結(jié)構(gòu)信息,通過(guò)自然語(yǔ)言描述,讓DeepSeek自動(dòng)生成對(duì)應(yīng)的SQL查詢,從而實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)結(jié)構(gòu)的智能化探索,需要的朋友可以參考下2025-02-02
一些關(guān)于數(shù)據(jù)存儲(chǔ)和查詢優(yōu)化的想法
今天咨詢了一下高手,關(guān)于數(shù)據(jù)存儲(chǔ)和查詢的問(wèn)題,最終目的就是快,大家可以適當(dāng)?shù)氖褂?/div> 2012-05-05
openGauss數(shù)據(jù)庫(kù)在CentOS上的安裝實(shí)踐記錄
這篇文章主要介紹了openGauss數(shù)據(jù)庫(kù)在CentOS上的安裝實(shí)踐,本文是基于華為云ECS+CentOS 7的openGauss數(shù)據(jù)庫(kù)安裝實(shí)踐,需要的朋友可以參考下2022-07-07
一次因表變量導(dǎo)致SQL執(zhí)行效率變慢的實(shí)戰(zhàn)記錄
這篇文章主要給大家介紹了一次因表變量導(dǎo)致SQL執(zhí)行效率變慢的實(shí)戰(zhàn)記錄,本文通過(guò)圖文以及示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者了解sql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-11-11

