【问题标题】:PHP PDO Security Procedures for Simple Inserting into MySQL用于简单插入 MySQL 的 PHP PDO 安全程序
【发布时间】:2017-11-04 04:06:29
【问题描述】:

我刚刚开始学习 PHP(与 SQL 一起),并且我已经研究了很多安全措施。本站:https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet 对我有所帮助,尽管其中大部分都被我这样的初学者所承认。

我发现为了防止 SQL 注入,最好的方法是通过准备好的和参数化的查询。所以我在 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;
?>

【问题讨论】:

  • 您没有收到未定义变量通知吗?绑定参数后声明文件和名称变量
  • $dbConnection 来自哪里?
  • 我不这样做是出于某种原因。 $dbConnection 是代码中的错误,应该只是 $conn。

标签: php mysql security pdo sql-injection


【解决方案1】:

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

所以,现在有两个问题值得关注:

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

【讨论】:

    猜你喜欢
    • 2013-06-13
    • 2012-08-30
    • 2012-06-29
    • 1970-01-01
    • 2014-11-24
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多