輸入單引號php
報錯,在%'附近出錯,猜想參數被 '% %'這種形式包裹,沒有任何過濾,直接帶入了數據庫查詢mysql
輸入order by查詢列sql
union select 肯定顯示位數據庫
而後分別查詢用戶,數據庫名,數據庫版本fetch
根據數據庫版本知道能夠經過information_schema表查詢信息,查詢table_name,從information_schema.tablesspa
查詢當前數據庫的tablename3d
查詢users表的列code
查詢字段的內容orm
貼上源碼blog
1 <?php 2 if(isset($_GET["title"])) 3 { 4 5 $title = $_GET["title"]; 6 7 $sql = "SELECT * FROM movies WHERE title LIKE '%" . sqli($title) . "%'"; 8 9 $recordset = mysql_query($sql, $link); 10 11 if(!$recordset) 12 { 13 14 // die("Error: " . mysql_error()); 15 16 ?> 17 18 <tr height="50"> 19 20 <td colspan="5" width="580"><?php die("Error: " . mysql_error()); ?></td> 21 <!-- 22 <td></td> 23 <td></td> 24 <td></td> 25 <td></td> 26 --> 27 28 </tr> 29 <?php 30 31 } 32 33 if(mysql_num_rows($recordset) != 0) 34 { 35 36 while($row = mysql_fetch_array($recordset)) 37 { 38 39 // print_r($row); 40 41 ?>
防護代碼
function sqli($data) { switch($_COOKIE["security_level"]) { case "0" : $data = no_check($data); break; case "1" : $data = sqli_check_1($data); break; case "2" : $data = sqli_check_2($data); break; default : $data = no_check($data); break;
low
沒有過濾
medium
function sqli_check_1($data) { return addslashes($data);
high
1 function sqli_check_2($data) 2 { 3 4 return mysql_real_escape_string($data); 5 6 }