1. 程式人生 > >在web開發中你不得不註意的安全驗證問題#1-SQL

在web開發中你不得不註意的安全驗證問題#1-SQL

css from ref pop 不堪 數據庫連接 school mys clas

前言

隨著WEB開發的發展如日中天,越來越多的程序員增加這個行列。尤其是在大型項目團隊開發的過程中。程序員們的水平參差不齊。

導致各種各樣的安全驗證不嚴密導致各種問題。

正如那句話所說,水桶能裝水的多少不取決於最高的擋板,而是最低的擋板。

那今天我就給大家演示一下常見的安全問題SQL的形成原因和預防。



環境準備

我本來打算用java做實驗的,考慮到PHP的話比較快,就用PHP演示吧。

以下是我連接數據庫的代碼以及數據庫的內容。

文件名稱sql.php

<?

php $conn=mysql_connect(‘localhost‘,‘root‘,‘root‘) or die("數據庫連接失敗"); mysql_query("set names gb2312"); mysql_select_db("mytest"); $id=$_GET[‘id‘]; $sql2="select * from user where id =".$id; $result2=mysql_query($sql2); while($alluser=mysql_fetch_array($result2)) { echo $alluser["name"]."==>".$alluser["school"]."<br>"; } mysql_close($conn); ?

>

這是非經常見的連接數據庫代碼,數據庫中有三個字段各自是id title content 那我們訪問我們的地址 http://127.0.0.1/safe/sql.php?

id=1
從數據庫中讀取id為1的內容,並輸入到頁面。

技術分享圖片 訪問正常.那麽假設我們構造URL成這個樣子呢?
http://127.0.0.1/safe/sql.php?id=1 and 1=1 ? ? ? ? ?//這個是顯示正常的。意思是把and後的也一起查詢。1=1顯然成立 http://127.0.0.1/safe/sql.php?

id=1 and 1=2 ? ? ? ??//這個是顯示不正常的,意思是把and後的也一起查詢。1=2顯然不成立
結果例如以下圖 技術分享圖片



這樣是非常明顯有SQL註入的漏洞的。 你以為這個漏洞沒什麽影響麽?那你大錯特錯了。


略微有點數據庫的知識就能夠構造一下查詢的語句
技術分享圖片
如上可看到,我們用order這種方法的時候。能夠推測到一共同擁有多少字段,非常顯然3個是正確的。
那麽接下來能夠用union來連接查詢。前提知道管理員表名。
構造URL例如以下
http://127.0.0.1/safe/sql.php?id=1 union select 1,2,3 from admin
這可能須要一點數據庫知識,意思是連接查詢,可將顯示位輸出到當前頁面。

結果例如以下 技術分享圖片

非常顯然多出了一個1和2的顯示位,那麽就能夠得到敏感信息了。 構造例如以下 127.0.0.1/safe/sql.php?

id=1 union select username,password,3 from admin
意思不在累述。

結果例如以下 技術分享圖片
這樣你的後臺管理賬號和密碼就被顯示出來了,假設你的項目後臺被別人登陸。後果不堪設想!
PS:本文僅僅是為提高程序員的安全意識。加強安全防護。請不要用於非法用途。因為水平有限,本文僅僅做拋磚引玉,轉載請註明出處,謝謝。


那麽怎麽預防這個問題呢?這個也是非常easy的。僅僅要在GET或POST中過濾一下參數就能夠了。

用正則表達式或者其它都是能夠的。眼下的非常多框架都是已經過濾的。詳細怎麽用就交給你自己了哦。實在不會的話能夠留言。


在web開發中你不得不註意的安全驗證問題#1-SQL