日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sql注入攻击实例mysql_MySQL 处理SQL注入攻击

發布時間:2023/12/10 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql注入攻击实例mysql_MySQL 处理SQL注入攻击 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL ?處理SQL注入攻擊

如果您通過網頁獲取用戶輸入并將其插入到一個MySQL數據庫中,則有可能讓您對稱為SQL注入的安全問題敞開大門。本課將教您如何幫助防止這種情況發生,并幫助您保護腳本和MySQL語句。

比如當你要求用戶輸入他們的名字,這時候他們給你的不是名字而是一個MySQL語句,那么你可能會在不知不覺中運行這條SQL語句。

永遠不要相信用戶提供的數據,只在驗證后處理此數據.通常,這是通過模式匹配來完成的。在下面的示例中,用戶名限制為字母數字混合個字符,加上下劃線和長度為8到20個字符—根據需要修改這些規則。if?(preg_match("/^\w{8,20}$/",?$_GET['username'],?$matches))

{

$result?=?mysql_query("SELECT?*?FROM?users

WHERE?username=$matches[0]");

}

else

{

echo?"username?not?accepted";

}

為了演示問題,請考慮以下輸入://?supposed?input

$name?=?"Qadir';?DELETE?FROM?users;";

mysql_query("SELECT?*?FROM?users?WHERE?name='{$name}'");

函數調用應該從users表中檢索記錄,其中名稱列與用戶指定的名稱匹配。在正常情況下, $name只包含字母數字字符和空格,例如字符串 ilia。但是在這里,通過將一個全新的查詢附加到$name,對數據庫的調用變成了災難:注入的刪除查詢從用戶刪除所有記錄。

幸運的是,如果使用MySQL ,mysql_query() 函數不允許在單個函數調用中查詢堆?;驁绦卸鄠€查詢。如果嘗試堆棧查詢,則調用失敗。

但是,其他PHP數據庫擴展,例如SQLite和PostgreSQL,則會愉快地執行堆疊查詢,執行一個字符串中提供的所有查詢,并產生嚴重的安全問題。

防止SQL注入:

您可以使用perl和PHP等腳本語言巧妙地處理所有轉義字符。PHP的MySQL擴展提供了函數mysql_real_escape_string()以轉義對MySQL有特殊意義的字符。if?(get_magic_quotes_gpc())

{

$name?=?stripslashes($name);

}

$name?=?mysql_real_escape_string($name);

mysql_query("SELECT?*?FROM?users?WHERE?name='{$name}'");

Like語句中的注入

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?'{$sub}%'");

總結

以上是生活随笔為你收集整理的sql注入攻击实例mysql_MySQL 处理SQL注入攻击的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。