我刚刚开始学习 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)?
- 是的,只要您禁用 EMULATE_PREPARES。
- 参见 this StackOverflow answer了解更多信息。
- 库,例如 EasyDB提供比 PDO 更安全的默认值。 ( For example .)
- 这是上传文件的安全方式吗?
- 代码在很多方面都被破坏了,但没有任何直接与安全相关的东西突然出现在我面前。
- 参见 this guide用于处理文件上传。请注意,您需要使用
$_FILES
而不是$_POST
来处理上传的文件。
关于用于简单插入 MySQL 的 PHP PDO 安全程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44334114/