SQL 語句中特殊字元的處理及預防sql 注射

2021-09-09 04:35:15 字數 996 閱讀 2334

在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]。

mysql sql語句中的特殊字元處理

今天在除錯sql語句時遇到了幾個地方報語法錯誤,主要是sql文字中特殊字元問題。環境是mysql vb6 用mysql odbc連線資料庫。在向mysql資料庫中插入文字型別的字段時注意替換的字元有。1.單引號 yourtext replace yourtext,2.轉義字元 yourtext re...

sql語句中的時間處理

我們在用sql語句處理資料庫資料時難免會遇到insert或者update一條資料,資料中的某個欄位是時間格式,那我們怎麼把引數的形式在sql語句中設定成時間格式呢,這裡記錄一下。update t bill contract bill set property fee 480.0,rent fee 6...

sql語句中的連線字元

union 操作符用於合併兩個或多個 select 語句的結果集。請注意,union 內部的 select 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每條 select 語句中的列的順序必須相同。聯合兩個表,沒有重複 select e name from employees chi...