用于简单插入MySQL的PHP PDO安全程序

用于简单插入MySQL的PHP PDO安全程序,php,mysql,security,pdo,sql-injection,Php,Mysql,Security,Pdo,Sql Injection,我刚刚开始学习PHP(和SQL一起),并且我已经研究了很多安全措施。本网站: 这对我很有帮助,尽管大部分都是像我这样的初学者所没有的 我发现,要防止SQL注入,最好的方法是通过准备好的和参数化的查询。所以我用PDO编写了我的PHP代码 但我仍然觉得它不那么安全,特别是因为我在处理文件传输 如果有人能看看我的代码的方法,看看它是否有任何即时的安全问题,我将不胜感激 谢谢:) 但我仍然觉得它不那么安全,特别是因为我在处理文件传输 因此,目前有两个问题值得关注: 准备好的语句是否足以停止SQL注

我刚刚开始学习PHP(和SQL一起),并且我已经研究了很多安全措施。本网站: 这对我很有帮助,尽管大部分都是像我这样的初学者所没有的

我发现,要防止SQL注入,最好的方法是通过准备好的和参数化的查询。所以我用PDO编写了我的PHP代码

但我仍然觉得它不那么安全,特别是因为我在处理文件传输

如果有人能看看我的代码的方法,看看它是否有任何即时的安全问题,我将不胜感激

谢谢:)


但我仍然觉得它不那么安全,特别是因为我在处理文件传输

因此,目前有两个问题值得关注:

  • 准备好的语句是否足以停止SQL注入?
    • 是的,只要您禁用仿真
    • 有关更多信息,请参阅
    • 诸如的库提供了比PDO更安全的默认值。()
  • 这是上传文件的安全方式吗?
    • 代码在很多方面都被破坏了,但是没有任何与安全直接相关的东西跳出来
    • 有关处理文件上载的信息,请参阅。请注意,您需要使用
      $\u文件
      而不是
      $\u POST
      来处理上载的文件

您没有收到未定义变量通知吗?在绑定参数后声明file and name变量,
$dbConnection
从何而来?也可以看到,出于这样或那样的原因,我没有声明$dbConnection是代码中的一个错误,应该是$conn。
<?php $servername = "localhost";
$username = "hello";
$password = "world";
$dbname = "file_uploads";

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

// prepare sql and bind parameters
$stmt = $conn->prepare("INSERT INTO file_uploads (file, name) VALUES (:file, 
:name");

$stmt->bindParam(':name', $name); 
$stmt->bindParam(':file', $file); 

// from data in an html form
$name=$_POST['name'];
$file=$_POST['file'];

$stmt->execute();

echo "New records created successfully";
}
catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
}
$conn = null;
?>