簡體   English   中英

SQL准備語句(PHP)

[英]SQL prepared statement (PHP)

我試圖了解SQL注入如何工作,以及如何防止它。 HTML登錄頁面包含一個表格,一個表格,一個用戶名和密碼字段,以及一個提交按鈕。 與mySQL數據庫一起使用的PHP代碼如下所示:

$conn = mysqli_connect($Host, $User, $Password, $DbName);
if (!$conn) {
 echo "Database connection error.";
 exit;
}
$query = "SELECT user_name, password from visitors where user_name = '".$_POST['user_name']."';";
$result = mysqli_query($conn, $query);
$row = mysqli_fetch_assoc($result);
$user_pass = md5($_POST['pass_word']);
$user_name = $row['user_name'];
if(strcmp($user_pass,$row['password']) != 0) {
 echo "Login failed";
}

為了防止SQL注入攻擊,我試圖實現准備好的語句,看看W3S網站和其他人。 我想我需要更換

$query="SELECT user_name, password from visitors where user_name='".$_POST['user_name']."';";

用這樣的東西:

$stmt = $conn->prepare("SELECT user_name, password from visitors where  user_name= ?");
if ($stmt->execute(array($_GET[‘user_name’]))) {
  while ($row = $stmt->fetch()) {
    $user_name = $row;
  }
} 

我不確定修正案的有效性。 此外,為了測試系統的漏洞是否已得到解決,我如何能夠通過原始的,未經修改的代碼訪問系統? 我試過了:

username: admin
password: ‘ or ‘1’=’1’ (and a number of other options too)

防止一階,二階和三階注入的最佳方法,我建議您在使用正確的字符集時使用PDO以及准備好的語句並禁用“模擬准備語句”。 有關SQL注入如何工作以及PDO如何阻止它的更多信息,請參見此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM