sql語言特殊字符處理

我們都知道SQL Server查詢過程中,單引號“'”是特殊字符,所以在查詢的時候要轉換成雙單引號“''”。
但這只是特殊字符的一個,在實際項目中,發現對于like操作還有以下特殊字符:下劃線“_”,百分號“%”,方括號“[]”以及尖號“^”。
其用途如下:
下劃線:用于代替一個任意字符(相當于正則表達式中的 ? )
百分號:用于代替任意數目的任意字符(相當于正則表達式中的 * )
方括號:用于轉義(事實上只有左方括號用于轉義,右方括號使用最近優先原則匹配最近的左方括號)
尖號:用于排除一些字符進行匹配(這個與正則表達式中的一樣)

以下是一些匹配的舉例,需要說明的是,只有like操作才有這些特殊字符,=操作是沒有的。
a_b... a[_]b%
a%b... a[%]b%
a[b... a[[]b%
a]b... a]b%
a[]b... a[[]]b%
a[^]b... a[[][^]]b%
a[^^]b... a[[][^][^]]b%

在實際進行處理的時候,對于=操作,我們一般只需要如此替換:
' -> ''
對于like操作,需要進行以下替換(注意順序也很重要)
[ -> [[] (這個必須是第一個替換的!!)
% -> [%] (這里%是指希望匹配的字符本身包括的%而不是專門用于匹配的通配符)
_ -> [_]
^ -> [^]

在sql語句中,有些特殊字符,是sql保留的。比如 ' [ ] 等。我們可以先看看它們的用法。

當需要查詢某數據時,加入條件語句,或著當你需要insert記錄時,我們用 ' 來將字符類型的數據引起來。比如:
Select * from Customers where City = 'London'

當表的名字或列的名字中,含有空格等一些特殊字符時,我們需要用[] 將表名引起來,告訴語法分析器,[]號內的才是一個完整的名稱。比如

Select * from [Order Details]

如果,字符數據中,含有 ' 改怎么辦呢?其實,好多人在這里并沒有處理字符川中 ' 符號,才造成sql 注射危險。就那上面的那個例子。在Sql語句拼接的時代,比如

string sql = "select * from Customers where CustomerID = '" + temp + "'";

如果,我給temp賦值為 Tom' or 1=1 ---?
那么你拼接起來的語句為 select * from Customers where CustomerID = 'Tom' or 1=1 --- '
哈哈,1=1 衡為真,---會把后面的sql語句注釋掉。而前面因為有輸入的 ' 而使的語句是合法的。那or的條件,會把所有的記錄都選出來。這就是sql注入。在做用戶登陸時,如果沒有處理該問題,那你的系統受危害的可能性會很高的。
如何處理字符數據中的 ' 符號呢? 方法很簡單,用兩個 ' 符號代替一個。 比如,其實際傳入的值為Lon'don,處理后為
Select * from Customers where City = 'Lon''don'
就可以了。

如果表或列的名稱中含有 [ 或 ] 字符呢?比如Select * from [Order] Details],那中間 ] 符號豈不是先和第一個[ 配了。后面的就是非法的了。怎么辦呢? 簡單,使用 ]] 代替 ] 。對于[,則無須處理。那就該為
Select * from [Order]] Details]。

轉載于:https://www.cnblogs.com/henryhappier/archive/2010/01/25/1656171.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536361.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536361.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536361.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小節

算法導論已學兩部分,第一部分是基礎知識,第二部分是排序。基礎知識介紹如何分析證明算法以及求時間復雜度。第二部分的排序學了很長時間。先是從簡單排序到復雜排序的一個過渡,打開了很多思路。然后就是無盡的算法分析。算法分析的時間比理解…

SPS2003升級到MOSS2007相關資料及問題總結

這幾天要把客戶的SPS2003門戶升級到MOSS2007的,客戶SPS2003門戶,數據26G,使用了自定義WebPart、自定義頁面、SSO等功能。升級過程中碰到大量問題。其中主要的問題有幾個,在這里把它們整理一下> 1、sps2003升級時,升…

Milking Time【動態規劃-dp】

Milking Time POJ - 3616 Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity that she decides to schedule her next N (1 ≤ N ≤ 1,000,000) hours (conveniently labeled 0..N-1) so that she produces as much milk as po…

HTTP首部(1)

1、報文首部 HTTP協議的請求和響應必定包含HTTP首部,它包括了客戶端和服務端分別處理請求和響應提供所需要的信息。報文主體字兒是所需要的用戶和資源的信息都在這邊。  HTTP請求報文組成 方法,URL,HTTP版本,HTTP首部字段 HTTP響…

UVA272--TEX Quotes【字符串】

TEX Quotes UVA - 272 題目傳送門 題目大意&#xff1a;將輸入字符串中的所有對雙引號的做雙引號改為 &#xff0c;右雙引號改為 。 解決方法&#xff1a;遍歷一遍及時修改即可。 AC代碼&#xff1a; #include <cstdio> #include <iostream> #include <…

XMLHttpRequest+WebForm模式(接口IHttpHandler)實現ajax

首先引入ajax.js文件 創建xmlhttpRequest對象 Code//創建XMLHttpRequest對象var xmlHttp;function newXMLHttpRequest() { if (window.XMLHttpRequest) { xmlHttp new XMLHttpRequest(); } else if (window.ActiveXObject) { try { xmlHttp …

UVA----10082?WERTYU【字符串】

WERTYU UVA - 10082 題目傳送門 題目大意&#xff1a;按照所給的鍵盤樣式&#xff0c;以及錯誤的字符串&#xff0c;輸出正確的字符串&#xff0c;其輸入的每一個字符都按照鍵盤樣式向右錯移了一位。 解決方法&#xff1a;將整個鍵盤用數組存起來&#xff0c;遍歷一遍即可。…

關于C生成的匯編與C++生成的匯編在函數名稱上的差異

最近用到ucos&#xff0c;這個RTOS本身是用C語言和部分匯編編寫&#xff0c;而自己又打算用C來寫應用&#xff0c;在其中遇到幾個問題&#xff0c;一番折騰之后&#xff0c;讓我更加深刻認識到了在一些一般不注意的細節上&#xff0c;C與C的不同。 1、對于ucos&#xff0c;雖…

UVA401????????Palindromes【字符串】

Palindromes UVA - 401 題目傳送門 題目大意&#xff1a;給你一個字符串&#xff0c;判斷其是回文串還是鏡像串。 AC代碼&#xff1a; #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <cstdlib> #…

IIS 5 與IIS 6 原理介紹

[ 轉] ASP.NET Process Model之一&#xff1a;IIS 和 ASP.NET ISAPI 前幾天有一個朋友在MSN上問我“ASP.NET 從最初的接收到Http request到最終生成Response的整個流程到底是怎樣的&#xff1f;”我覺得這個問題涉及到IIS和ASP.NETASP.NET Runtime的處理模型的問題&#xff0c;…

UVA340????????Master-Mind Hints【數組】

Master-Mind Hints UVA - 340 題目傳送門 題目大意&#xff1a;先輸入一個整數n&#xff0c;表示有n個數字&#xff0c;下面第一行代表正確答案&#xff0c;其下每一行代表用戶猜的答案&#xff0c;需統計其有多少數字位置正確&#xff08;A&#xff09;&#xff0c;有多少數…

教你如何把自己從好友的QQ中刪除

在QQ中&#xff0c;有些人看了不太順眼&#xff0c;真不知當初為何讓他加自己為好友的&#xff01; 那有什么辦法&#xff0c;可以把自己從對方的QQ中刪除呢&#xff1f; 其實&#xff0c;用QQ就可以輕松搞定&#xff01; 讓我來為你支一招吧&#xff01; 打開QQ&#xff0…

UVA1583?Digit Generator

Digit Generator UVA - 1583 題目傳送門 題目大意&#xff1a;若x的各位數之和加上x本身等于y&#xff0c;則證明x是y的生成元&#xff0c;求輸入數字n的最小生成元。 AC代碼&#xff1a; #include <cstdio> #include <iostream> #include <algorithm> …

C++內存詳解

偉大的Bill Gates 曾經失言&#xff1a; 640K ought to be enough for everybody — Bill Gates 1981 程序員們經常編寫內存管理程序&#xff0c;往往提心吊膽。如果不想觸雷&#xff0c;唯一的解決辦法就是發現所有潛伏的地雷并且排除它們&#xff0c;躲是躲不了的。本文的內…

UVA1584????????Circular Sequence【字符串】

Circular Sequence UVA - 1584 題目傳送門 題目大意&#xff1a;輸入一個環形字符串&#xff0c;需輸出其最小字典序的形式的字符串。 AC代碼&#xff1a; #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #includ…

UVA1585 Score

Score UVA - 1585 題目傳送門 題目大意&#xff1a;輸入一個字符串&#xff0c;O的分數為1&#xff0c;若出現連續的O&#xff0c;如OOOO...&#xff0c;分數為1,2,3,4...&#xff0c;X為0分&#xff0c;求最終的分數 AC代碼&#xff1a; #include <cstdio> #includ…

operater int()

class Number { int number; public: explicit Number(int n){number n;} operator int() //注意一定不能聲明返回值 { return number; } }; int main () { Number n1 Number(100); int n2 n1; cout << n2 << endl; re…

UVA1586???????? Molar mass

Molar mass UVA - 1586 題目傳送門 題目大意&#xff1a;給你一個只包含C,H,O,N分子式&#xff0c;其中C,H,O,N的原子量分別為&#xff1a;12.01,1.008,16.00,14.01&#xff0c;求其分子量 AC代碼&#xff1a; #include <cstdio> #include <iostream> #includ…

SharePoint v3:忘掉模擬用戶Impersonate,SPSecurity.RunWithElevatedPrivileges來了

回顧&#xff1a; 在SharePoint V2 大家應該都用過模擬用戶Impersonate這個功能&#xff0c; 這個功能用來暫時提升某個用戶的權限&#xff0c;比如某個普通用戶的本來不能修改某個列表的值&#xff0c;但是我們功能需要在修改。 缺點&#xff1a; 我們使用這個模擬用戶功能…

UVA1225????????Digit Counting

Digit Counting UVA - 1225 題目傳送門 題目大意&#xff1a;輸入一個數字T&#xff0c;代表有T組測試數據&#xff0c;下面每行有一個整數n&#xff0c;求將1到n的數字連成一串后每個數字出現的個數。 AC代碼&#xff1a; #include <cstdio> #include <iostream&…