欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析MySQL的注入安全問題

 更新時間:2015年05月27日 10:51:24   投稿:goldensun  
這篇文章主要介紹了淺析MySQL的注入安全問題,文中簡單說道了如何避免SQL注入敞開問題的方法,需要的朋友可以參考下

如果把用戶輸入到一個網(wǎng)頁,將其插入到MySQL數(shù)據(jù)庫,有機(jī)會離開了發(fā)生安全問題被稱為SQL注入敞開。這一課將教如何幫助防止這種情況的發(fā)生,并幫助保護(hù)腳本和MySQL語句。

注入通常發(fā)生在處理一個用戶輸入,如他們的名字,而不是一個名字,他們給一個會在不知不覺中你的數(shù)據(jù)庫上運(yùn)行的MySQL語句。

永遠(yuǎn)不要信任用戶提供的數(shù)據(jù),只能驗(yàn)證后處理這些數(shù)據(jù),作為一項(xiàng)規(guī)則,這是通過模式匹配。在下面的例子中,用戶名被限制為字母數(shù)字字符加下劃線的長度在8到20個字符之間 - 根據(jù)需要修改這些規(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";
}

為了說明這個問題,認(rèn)為這是摘要:

// supposed input
$name = "Qadir'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name='{$name}'");

函數(shù)調(diào)用應(yīng)該是從用戶表中的名稱列的名稱相匹配用戶指定的檢索記錄。在正常情況下,名稱只包含字母數(shù)字字符或空間,如字符串髂骨。但在這里,給$name通過附加一個全新的查詢,調(diào)用數(shù)據(jù)庫變成災(zāi)難:注入DELETE查詢刪除用戶的所有記錄。

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

其他PHP數(shù)據(jù)庫擴(kuò)展,如SQLite和PostgreSQL則愉快地進(jìn)行堆查詢,執(zhí)行在一個字符串中的所有的查詢,并創(chuàng)建一個嚴(yán)重的安全問題。
防止SQL注入:

可以處理所有的轉(zhuǎn)義字符巧妙的腳本語言,比如Perl和PHP。 PHP的MySQL擴(kuò)展提供的函數(shù)mysql_real_escape_string()輸入到MySQL的特殊字符進(jìn)行轉(zhuǎn)義。

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)義機(jī)制必須用戶提供的%和_字符轉(zhuǎn)換成文字。使用addcslashes()函數(shù),讓可以指定一個字符范圍轉(zhuǎn)義。

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


相關(guān)文章

  • mysql遠(yuǎn)程跨庫聯(lián)合查詢的示例

    mysql遠(yuǎn)程跨庫聯(lián)合查詢的示例

    本文主要介紹了mysql遠(yuǎn)程跨庫聯(lián)合查詢的示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • MySQL show命令的用法

    MySQL show命令的用法

    MySQL show命令的用法,在dos下很方便的顯示一些信息。
    2010-04-04
  • MySQL中NOT IN填坑之列為null的問題解決

    MySQL中NOT IN填坑之列為null的問題解決

    這篇文章主要給大家介紹了關(guān)于MySQL中NOT IN填坑之列為null的問題解決的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • SELECT… FOR UPDATE 排他鎖的實(shí)現(xiàn)

    SELECT… FOR UPDATE 排他鎖的實(shí)現(xiàn)

    本文主要介紹了SELECT… FOR UPDATE 排他鎖的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Mysql中使用時間查詢的詳細(xì)圖文教程

    Mysql中使用時間查詢的詳細(xì)圖文教程

    在項(xiàng)目開發(fā)中,一些業(yè)務(wù)表字段經(jīng)常使用日期和時間類型,下面這篇文章主要給大家介紹了關(guān)于Mysql中使用時間查詢的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • MySQL中VARCHAR與CHAR格式數(shù)據(jù)的區(qū)別

    MySQL中VARCHAR與CHAR格式數(shù)據(jù)的區(qū)別

    char是一種固定長度的類型,varchar則是一種可變長度的類型,那么他們具體使用過程中有什么區(qū)別嗎
    2015-09-09
  • Mac下MySQL安裝配置教程

    Mac下MySQL安裝配置教程

    這篇文章主要為大家詳細(xì)介紹了Mac下MySQL安裝配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • MySQL動態(tài)創(chuàng)建表,數(shù)據(jù)分表的存儲過程

    MySQL動態(tài)創(chuàng)建表,數(shù)據(jù)分表的存儲過程

    MySQL動態(tài)創(chuàng)建表,數(shù)據(jù)分表的存儲過程,需要的朋友可以參考下。
    2011-08-08
  • MySQL存儲過程輸入?yún)?shù)(in),輸出參數(shù)(out),輸入輸出參數(shù)(inout)

    MySQL存儲過程輸入?yún)?shù)(in),輸出參數(shù)(out),輸入輸出參數(shù)(inout)

    這篇文章主要介紹了MySQL存儲過程輸入?yún)?shù)(in),輸出參數(shù)(out),輸入輸出參數(shù)(inout),存儲過程就是一組SQL語句集,功能強(qiáng)大,可以實(shí)現(xiàn)一些比較復(fù)雜的邏輯功能,類似于JAVA語言中的方法;Python里面的函數(shù)
    2022-07-07
  • SQL數(shù)據(jù)分表Mybatis?Plus動態(tài)表名優(yōu)方案

    SQL數(shù)據(jù)分表Mybatis?Plus動態(tài)表名優(yōu)方案

    這篇文章主要介紹了SQL數(shù)據(jù)分表Mybatis?Plus動態(tài)表名優(yōu)方案,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08

最新評論