在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 數(shù)據(jù)庫/ MySQL SQL Injection
MySQL 復(fù)制表
MySQL ALTER 命令
MySQL 安裝
MySQL 日期與時間方面的函數(shù)
MySQL SQL Injection
MySQL 排序結(jié)果
MySQL 臨時表
MySQL 介紹
MySQL 數(shù)據(jù)導(dǎo)出
MySQL 索引
MySQL 數(shù)值函數(shù)
MySQL 更新查詢
MySQL UNION 關(guān)鍵字
MySQL RAND 函數(shù)
創(chuàng)建 MySQL 數(shù)據(jù)庫
MySQL AVG 函數(shù)
MySQL Using Join
MySQL Handling Duplicates
MySQL SUM 函數(shù)
MySQL 數(shù)據(jù)類型
MySQL 插入查詢
MySQL 字符串函數(shù)
MySQL Using Sequences
MySQL 管理
MySQL 數(shù)據(jù)導(dǎo)入
MySQL BETWEEN 子句
MySQL MIN 函數(shù)
創(chuàng)建 MySQL 表
MySQL Group By 子句
MySQL COUNT 函數(shù)
MySQL 匯報
MySQL 選擇數(shù)據(jù)庫
MySQL Where Clause
MySQL 選擇查詢
MySQL Like Clause
MySQL 正則表達(dá)式
一些非常有用的學(xué)習(xí)資源
MySQL NULL Values
MySQL 刪除查詢
MySQL 數(shù)據(jù)庫信息
一些有用的 MySQL 函數(shù)與子句
MySQL 刪除表
MySQL MAX 函數(shù)
MySQL SQRT 函數(shù)
MySQL 終止數(shù)據(jù)庫
連接 MySQL 服務(wù)器
MySQL IN 子句
MySQL CONCAT 函數(shù)
MySQL PHP語法

MySQL SQL Injection

如果通過網(wǎng)頁接收用戶輸入,而后再把這些數(shù)據(jù)插入到數(shù)據(jù)庫中,那么你可能就會碰到 SQL 注入式攻擊。本節(jié)簡要介紹如何防范這種攻擊,確保腳本和 MySQL 語句的安全性。

注入式攻擊往往發(fā)生在要求用戶輸入時,比如說要求他們輸入自己的名字,但是他們卻輸入了一段 MySQL 語句,不知不覺地運行在數(shù)據(jù)庫上。

永遠(yuǎn)不要相信用戶所提供的數(shù)據(jù),只有在驗證無誤后,才能去處理數(shù)據(jù)。通常,利用模式匹配來實現(xiàn)。在下面這個范例中,username(用戶名)被限定為字母數(shù)字混合編制的字符串,再加上下劃線,長度限定為8~20個字符之間。當(dāng)然,可以按需要修改這些規(guī)范。

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
   $result = mysql_query("SELECT * FROM users 
                          WHERE username=$matches[0]");
}
 else 
{
   echo "username not accepted";
}

為了暴露問題所在,請考慮下面這段代碼:

// 本應(yīng)該的輸入
$name = "Qadir'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name='{$name}'");

函數(shù)調(diào)用原本會從 users 表中獲取一個記錄。name 列與用戶所指定的名字所匹配。在一般情況下,$name 會包含字母數(shù)字混合編制的字符,或許還包含空格,such as the string ilia. 但這里,為 $name 添加了一個全新的查詢,數(shù)據(jù)庫調(diào)用就變成了災(zāi)難:注入的 DELETE 查詢會刪除 users 表中所有的記錄。

幸運的是,如果使用 MySQL,mysql_query() 函數(shù)不允許堆疊查詢,或在一個函數(shù)調(diào)用中執(zhí)行多個查詢。如果嘗試使用堆疊查詢,則調(diào)用會失敗。

然而,有些 PHP 數(shù)據(jù)庫擴展,比如 SQLite 或 PostgreSQL,卻能很好地執(zhí)行堆疊查詢,能夠執(zhí)行一個字符串中所提供的所有查詢,從而造成嚴(yán)重的安全隱患。

防止 SQL 注入式攻擊

使用 PERL 或 PHP 這樣的腳本語言,可以很巧妙地處理轉(zhuǎn)義字符。MySQL 針對 PHP 的擴展也提供了 mysql_real_escape_string() ,可以將輸入的字符轉(zhuǎn)義為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 困境,常用的轉(zhuǎn)義機制必須將 用戶所輸入的 %_ 字符轉(zhuǎn)義為字面值。使用 addcslashes() 能為你指定一個轉(zhuǎn)義字符范圍。

$sub = addcslashes(mysql_real_escape_string("%something_"), "%_");
// $sub == \%something\_
mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");