【发布时间】: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