防SQL注入

2021-08-16 20:44:47 字數 1455 閱讀 4626

1.必須認定使用者輸入的資料都是不安全的

使用者輸入的資料進行過濾處理

if (preg_match("/^\w$/", $_get['username'], $matches))

else

讓我們看下在沒有過濾特殊字元時,出現的sql情況:

// 設定$name 中插入了我們不需要的sql語句

$name

="qadir'; delete from users;"

;mysqli_query

($conn

,"select * from users where name=''"

);

以上的注入語句中,我們沒有對 $name 的變數進行過濾,$name 中插入了我們不需要的sql語句,將刪除 users 表中的所有資料。

在php中的 mysqli_query() 是不允許執行多個 sql 語句的,但是在 sqlite 和 postgresql 是可以同時執行多條sql語句的,所以我們對這些使用者的資料需要進行嚴格的驗證。

防止sql注入,我們需要注意以下幾個要點:

在指令碼語言,如perl和php你可以對使用者輸入的資料進行轉義從而來防止sql注入。

php的mysql擴充套件提供了mysqli_real_escape_string()函式來轉義特殊的輸入字元。

if

(get_magic_quotes_gpc

())$name

=mysqli_real_escape_string

($conn

,$name

);mysqli_query

($conn

,"select * from users where name=''"

);

like查詢時,如果使用者輸入的值有"_"和"%",則會出現這種情況:使用者本來只是想查詢"abcd_",查詢結果中卻有"abcd_"、"abcde"、"abcdf"等等;使用者要查詢"30%"(注:百分之三十)時也會出現問題。

在php指令碼中我們可以使用addcslashes()函式來處理以上情況,如下例項:

$sub 

=addcslashes

(mysqli_real_escape_string

($conn

,"%something_"

),"%_"

);// $sub == \%something\_

mysqli_query

($conn

,"select * from messages where subject like '%'"

);

addcslashes() 函式在指定的字元前新增反斜槓。

語法格式:

addcslashes

(string

,characters

)

防SQL注入

這段 有好處也有壞處,用的時候得小心,搞不好就會跳進錯誤 dimsql injdata sql injdata and exec insert select delete update chr mid master truncate char declare sql inj split sql in...

防SQL注入

與資料庫互動的 web 應用程式中最嚴重的風險之一 sql 注入攻擊。sql 注入是應用程式開發人員未預期的把 sql 傳入到應用程式的過程,它由於應用程式的糟糕設計而使攻擊成為可能,並且只有那些直接使用使用者提供的值構建 sql 語句的應用程式才會受影響。sql 語句通過字串的構造技術動態建立,文...

被動防SQL注入

call sql into check 呼叫ql防注入 2008 05 14 kz sql防注入 2008 05 14 kz sub sql into check dim sql injdata sql injdata and exec insert select delete update cou...