PHP中 簡單的SQL注入分析

來源:互聯網
上載者:User

標籤:

SQL注入原理:就是通過把SQL命令插入到Web表單遞交或輸入欄位名或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的SQL命令。

以下介紹SQL注入方式:

首先建表如下:
1 create database sqltest charset utf82 3 create table test (4 id int,5 name varchar(10),6 age tinyint unsigned
7 )engine=myisam charset=utf8

插入資料如下

我們分成欄位為數實值型別和字串類型兩種方式進行測試:

一、下面開始測試欄位為數實值型別時的sql注入,sql語句:
1 $id= $_GET[‘tid‘];2 $sql = "select * from test where id = $id";

尋找id為1的記錄,在瀏覽器中輸入並執行如下

可以看到,此時只查詢到1條記錄,查詢結果上面顯示的是自動拼接好的sql字串。繼續,將瀏覽器URL中的tid=1 換成tid=1 or 1=1測試,結果如下

此時所有的記錄都被查出來了,這是針對欄位為數實值型別時 的sql注入方式,為了避免被注入我們可以將代碼:

$id= $_GET[‘tid‘];

改成如下:

$id= $_GET[‘tid‘] + 0;

原理:當資料庫中欄位為數實值型別時,不管你的參數多麼險惡,+0後都老老實實變成數實值型別。

 

 二、測試欄位為數實值型別時的sql注入,sql語句:

$name = $_GET[‘name‘];$sql1 = "select * from test where name = ‘$name‘";

尋找name為test1的記錄,在瀏覽器中輸入並執行如下:

只查到一條記錄,這是正確的。現在把URL中 name=test1 換成 name=test1‘ or 1=1--‘   測試如下:

所有記錄都被查出來了。從顯示的sql語句可以看出where後面的運算式 name = ‘test1‘ or 1=1--‘ 恒為真(--將其後面的字串都省略掉)

針對上面的sql注入 我們可以通過將瀏覽器中接受來的字元轉義的方式避免,在php中 可以採用魔術引號的方法,將PHP.ini檔案中的參數magic_quotes_gpc置為ON

例如: 瀏覽器中name = test1‘ or 1=1--‘,經過轉義後得到的sql字串變為:

select * from test where name = ‘test1\‘ or 1=1--\‘‘

重新查詢變為:

這時查不到任何結果,字串的引號是成對出現的,經過轉義後 sql 把test\‘ or 1=1--\‘作為一個字串,而不是像上述把 ‘test‘ 作為一個字串。

這隻是最簡單的sql注入,更深的後面再研究吧

PHP中 簡單的SQL注入分析

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.