php - 我怎样才能使这个插入免受 MySQL 注入(inject)的影响?

标签 php mysql sql-injection

<分区>

我是 PHP 和数据库编程的新手,一直在尝试将数据从表单添加到 MySQL 数据库。它工作正常,但这对我的 MySQL 注入(inject)开放吗?我读过很多教程,我在想 PDO 准备好的语句。例如,如何为我的评论字段执行此操作?该字段(它是一个文本字段)将完全开放给用户想要输入的任何内容。我怎样才能写这个以使其更安全?

<?php
ob_start();
$username = 'name'; 
$password = 'pass'; 
$host = 'localhost'; 
$dbname = 'map';



try {
$dbh = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO Incidents (


        protocol,
        jurisdiction,
        date,
        time,
        comments,
        video,
        lat,
        lng



            )

        VALUES (


        '".$_POST["protocol"]."',
        '".$_POST["jurisdiction"]."',
        '".$_POST["date"]."',
        '".$_POST["time"]."',
        '".$_POST["comments"]."',
        '".$_POST["video"]."',
        '".$_POST["lat"]."',
        '".$_POST["lng"]."'


        )

        ";

// use exec() because no results are returned
$dbh->exec($sql);
header("Location: map1.php"); 

}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}

$dbh = null;




ob_end_flush();
?>

最佳答案

PDO 已经很安全了。现在您可以使用 bindParam() 来提高安全性,例如:

<?php
 ob_start();
 $username = 'name'; 
 $password = 'pass'; 
 $host = 'localhost'; 
 $dbname = 'map';

try {
 $dbh = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
 // set the PDO error mode to exception
 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

 $sql = "INSERT INTO Incidents SET protocol = ?, jurisdiction = ?, date = ?, time = ?, comments = ?, video = ?, lat = ?, lng = ? ";
 $smt->$dbh->prepare($sql);
 $smt->bindParam(1, $_POST["protocol"]);
 $smt->bindParam(2, $_POST["jurisdiction"]);
 $smt->bindParam(3, $_POST["date"]);
 $smt->bindParam(4, $_POST["time"]);
 $smt->bindParam(5, $_POST["comments"]);
 $smt->bindParam(6, $_POST["video"]);
 $smt->bindParam(7, $_POST["lat"]);
 $smt->bindParam(8, $_POST["lng"]);

 // use exec() because no results are returned
 $smt->execute();
 if($smt->rowCount()) { // if insertion success
   header("Location: map1.php"); 
 }

}
catch(PDOException $e) {
   echo $sql . "<br>" . $e->getMessage();
}

 $dbh = null;

 ob_end_flush();
?>

关于php - 我怎样才能使这个插入免受 MySQL 注入(inject)的影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32431782/

相关文章:

php - 删除 JQuery 库后 JQuery 仍然存在

php - 如何在 php 中同时从一个表单访问两个数组?

mysql 查询不起作用

php - 在 php 中发送加号获取 url 参数

php - 如何使用 PHP 重定向到另一个页面

php - SSL 连接错误 :140770FC

php - 使用 PHP 通过电子邮件发送文件在 IE 8 中不起作用

java - 我可以更改 MySQL 数据库中的列数据类型而不丢失任何数据吗?

python - 在 Python influxdb_client 的 Flux 查询中使用参数

php - 如何防止 PHP 中的 SQL 注入(inject)?