国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

sql注入測試經驗教程

2024-07-24 12:42:33
字體:
來源:轉載
供稿:網友

   登錄注入

  先看一個我們一般用的登錄頁面sql語句(原生態php執行的sql)

  $sql = "select * from users where username = '$username' and password = '$password'";

  對于這種sql,對應一個萬能密碼和用戶名:

  萬能密碼: xx' or 1='1

  萬能用戶名: xx' union select * from users/*

  執行時mysql解釋為:

  $sql = select * from users where username = '$username' and password = ' xx' or 1='1'

  不解釋,瞬間破解

  同樣,上面是在sql語句中查詢字段后的輸入值加了單引號,有些時候尤其是初級程序員經常對變量不加單引號:

  $sql = "select * from users where username = $username and password = $password";

  這時mysql解釋會被當做數字型字段來匹配

  萬能密碼: 11 union select * from users/*

  執行語句:

  select * from users where username =11union select * from users/* and password = 54

  查詢注入

  這個比較好理解,一般在頁面的搜索框點擊按鈕搜索時在后臺sql中可能會用like來查詢,但如果沒有加任何處理,可能輸入一個% 或 __ 就會注入到sql中查詢全部或部分記錄,不過在php中可以使用一個函數來處理一下:

  $keyword = addslashes($keyword);$keword = str_replace("%","$",$kwyword);

  插入注入

  我們先模擬一個網站注冊頁面的sql處理語句:

  insert into users(username,password,grade) values('frank','123456','1');

  假如users表中grade為等級字段,并且默認字段為1,注冊時用戶輸入用戶名和密碼兩個字段后,后臺插入語句為上面語句,則當用戶輸入的密碼為 123456','3')/*時,執行sql為:

  insert into users(username,password,grade) values('frank','123456','3')/*,'1';

  這樣也可以達到注入的目的

  解決sql注入:

 ?、? 在服務器設置將php.ini配置文件中magic_quotes_gpc設置為On

  服務器會自動將單引號轉義為:'

  不過攻擊時可以將單引號寫為char(13)-單引號ASCII碼,也一樣可以攻擊

  ②. 密碼比對

  通過輸入的用戶名獲取密碼,再對密碼進行匹配

  $sql = "select * from users where username ='frank'"

  $result = mysql_query($sql,$conn);

  $row = mysql_fetch_array($result);

  if($row['password'] != $password) ...

 ?、? 使用pdo的PDO::prepare()預處理操作

  PDO(PHP Data Object)擴展在PHP5中加入,PHP6默認識別PDO連接數據庫,pdo相當于是一個數據庫抽象層,不同數據庫使用相同的方法名,解決數據庫連接不同意問題。

  工作原理如下:

sql注入測試經驗教程 武林網

  (使用時需先在php.ini中開啟對pdo擴展的支持)

  $sql = "select * from users where username=? and password=?"; //創建一個pdo對象 $mypdo = new PDO("mysql:host=localhost;port=3306;dbname=xx","root","123456"); //設置編碼 $mypdo->exec("set names utf8"); //預處理$sql $pdostatement = $mypdo->prepare(%sql); //將用戶名和密碼填入sql $pdostatement->execute(array($username,$password)); //得到查詢結果 $result = $pdostatement->fetch(); if(empty($result)) ...

 ?、? 其他企業級解決sql注入方式:IDS(入侵檢測系統)

sql注入測試經驗教程

  關于sql注入對于開發工程師來說主要是防守,提高編寫安全代碼的意識,讓我們編寫的代碼質量更高,安全性方面更好。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玉屏| 汉川市| 突泉县| 冀州市| 承德市| 河北省| 合山市| 龙陵县| 麟游县| 漾濞| 凤冈县| 南华县| 隆子县| 阜平县| 平山县| 靖远县| 杭锦旗| 宾川县| 镇宁| 芜湖县| 新昌县| 志丹县| 万载县| 青河县| 乌兰浩特市| 千阳县| 高碑店市| 齐河县| 衡阳县| 乌恰县| 武强县| 宁陕县| 兰考县| 个旧市| 德保县| 垦利县| 巴里| 达尔| 萍乡市| 漯河市| 北流市|