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

标签 php mysql security pdo sql-injection

我刚刚开始学习 PHP(以及 SQL)并且我已经研究了很多安全措施。本站:https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet 对我有帮助,尽管对于像我这样的初学者来说,其中大部分内容都是无可否认的。

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

但我仍然觉得它不太安全,尤其是因为我正在处理文件传输。

如果有人可以查看我的代码的方法以查看它是否存在任何直接的安全问题,我将不胜感激。

谢谢:)

<?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;
?>

最佳答案

But I still feel like its not all that secure, especially because I am handling file transfer.

所以,目前有两个问题需要关注:

  • 准备好的语句是否足以阻止 SQL 注入(inject)?
  • 这是上传文件的安全方式吗?
    • 代码在很多方面都被破坏了,但没有任何直接与安全相关的东西突然出现在我面前。
    • 参见 this guide用于处理文件上传。请注意,您需要使用 $_FILES 而不是 $_POST 来处理上传的文件。

关于用于简单插入 MySQL 的 PHP PDO 安全程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44334114/

相关文章:

MYSQL SELECT 与矛盾的限制

php - 亚马逊 AWS 简单工作流服务 SWF PHP 示例

javascript - 如何在 PHP Laravel 中使用 SQL 语句打印所有数组?

php - 如何优化mysql中的查询

php - 如何在 MySQL 中检索多个表并格式化其中的一些行?

php - 发送未加密的密码是一种好习惯吗?

php - Magento数据库升级1.4.2到1.9验证

MySQL创建一个循环自身的存储过程

java - @RolesAllowed 对我的 RESTful 服务没有影响

security - Excel VBA 代码的密码保护如何工作?