2014-11-03 68 views
0

如何通過使用轉義字符串或其他方法防止sql注入?我確實有一些代碼,但我不知道該怎麼辦?任何幫助?PHP SQL注入預防

<?php 
          if (isset($_POST['submit'])){ 
          session_start(); 
          $username = $_POST['username']; 
          $password = $_POST['password']; 
          $query = "SELECT * FROM users WHERE username='$username' AND password='$password'"; 
          $result = mysql_query($query)or die(mysql_error()); 
          $num_row = mysql_num_rows($result); 
           $row=mysql_fetch_array($result); 
           if($num_row > 0) { 
            header('location:dashboard.php'); 
          $_SESSION['id']=$row['user_id']; 
           } 
           else{ ?> 
          <div class="alert alert-danger">Access Denied</div>  
          <?php 
          }} 
          ?> 
+0

你首先需要驗證/清理你的POST變量,並且首先升級到mysqli/PDO而不是mysql – EternalHour 2014-11-03 08:05:50

+0

,使用明文密碼是邪惡的。 Id建議熟悉一些orm,而不是重新發明輪子 – Serg 2014-11-03 08:07:34

+1

不要使用mysql。此擴展從PHP 5.5.0開始已棄用,並將在未來刪除。相反,應該使用MySQLi或PDO_MySQL擴展。關於你的問題,[檢查這個答案](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)。 – jherran 2014-11-03 08:07:39

回答

3

使用PDO這兩個POST變量,而不是被棄用,並將在未來被刪除舊版本的MySQL功能:

$conn = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$sql = "INSERT INTO table (field1, field2, field3) 
       VALUES (:field1, :field2, :field3"; 

$q = $conn->prepare($sql); 
$q->execute(array(':field1'=>$field1, 
       ':field2'=>$field2, 
       ':field3'=>$field3 
       )); 
+0

+ +1對於精確的答案:) – 2014-11-03 08:50:56

0

你可以通過在逃生方法

$username = mysql_real_escape_string($_POST['username']); 
$password = mysql_real_escape_string($_POST['password']);