下面我們根據我編程序的經驗來寫一篇關於mysql教程 sql防注入簡介與防注入實例吧。
sql防注入簡介:
sql查詢是一種用來數據與用戶進行交互的文本語言,sql利用外部接將用戶提交的數據發送給mysql數據庫教程服務器進行處理,如果沒有嚴密的過濾,可能導致數據丟失,如被刪除,修改,而這樣問題是網絡管理員很難做事的,他們不能通過打系統被丁,或安裝防火強可以控制了,。
下面我們來看一個簡單的用戶登陸實例。
一,創建用戶表user
create table user (
userid(int) not null auto_increment,
username not null default'',
userpass not null default '',
primary key(userid)
)type= myisam auto_increment=1;
好表就創建成功了。我們先給用戶表user插入一條記錄
insert into 'user' values(1,'www.111cn.net','123456');
現在來做用戶登陸代碼
<?php教程
$root ='localhost';
$dbName='root';
$dbpwd ='123456';
$db = 'userdb';
mysql_connect($root,$dbName,$dbpwd) or die('數據庫連接失敗');
$sql ="select * from user where username='$username" and password='$pwd';
$result =mysql_db_query($db,$sql);
$ufo = mysql_fetch_array( $result );
if( $ufo )
{
echo '登陸成功';
}
else
{
echo '登陸失敗';
}
好現在我們來做一個實例提供一個url給上面的php處理頁面
http://www.111cn.net/test/a.php?user=www.111cn.net' or ' 1= 1;
結果發現這條sql可以成功登陸我們的系統,而不是我想要的密碼等12346,好下面我們再來看個實例
http://www.111cn.net/test/a.php?user=www.111cn.net' /*;
http://www.111cn.net/test/a.php?user=www.111cn.net' or ' #;
這樣只要用戶名正確同樣可以登陸系統,在sql語句中/*與#是注掉後面的sql,
好了,根據上面的問題我們寫了一個自定義函數來過濾大部sql注入的防注入函數
function safesql()
{
$re = "/(|'%27|;|(%3d)|(|(%28)|)|(%29)|(/*)|(%2f%2a)|(%2a%2f)|+|(%2b)|(<|(%3e)|(%3e)|(--))|[|%5d)/";
if( preg_match( $re ,$username)
{
echo'請不要非法sql注入';
exit;
}
else
{
return turn;
}
最後總結一下:
注明:本站原創文章轉載注明來源www.111cn.net