php - 试图保护我的 SQL 查询免受注入攻击并且没有任何运气
问题描述
我在这里阅读了几篇文章,并逐字逐句地按照查询(减去我的变量名),我无法让我的代码在我正在处理的网站上运行而不会出现错误。我所拥有的只是一个用户可以上传图像的表单。
我的原始代码易受攻击但有效:
<?php
$uploadDir = 'images/';
if(isset($_POST['upload']))
{
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
$memberID = $_POST['member-id'];
$imgTitle = $_POST['img-title'];
$catID = $_POST['catID'];
$filePath = $uploadDir . $fileName;
$result = move_uploaded_file($tmpName, $filePath);
if (!$result) {
echo "Error uploading file";
exit;
}
echo "<br>Files uploaded<br>";
if(mysqli_connect_errno())
{
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fileName);
$filePath = addslashes($filePath);
}
$query = "INSERT INTO `tblImage` (`fldImageID`, `fldMemberID`, `fldCatID`, `fldFilePath`, `fldName`) VALUES (NULL, '$memberID', '$catID', '$filePath', '$imgTitle')";
$query = "SELECT `fldImageID` FROM `tblImage` ORDER BY `fldImageID` DESC LIMIT 1";
$result = $conn->query($query) or die ("error");
}
?>
然后下面是我尝试执行准备好的语句但没有运气的地方,请有人指出我的错误是我只粘贴了下面的代码,它覆盖了上面 $query 开始的代码......
$stmt = $conn->prepare = ("INSERT INTO tblImage (fldImageID, fldMemberID, fldCatID, fldFilePath, fldName) VALUES (NULL, ?, ?, ?, ?)");
$stmt->bind_param($stmt, "ssss", $memberID, $catID, $filePath, $imgTitle);
mysqli_stmt_execute($stmt);
$stmt->execute();
$result = mysqli_stmt_get_result($stmt) or die ("error");
解决方案
你有一个额外的价值分配:
$stmt = $conn->prepare = ("INSERT INTO tblImage (fldImageID, fldMemberID, fldCatID, fldFilePath, fldName) VALUES (NULL, ?, ?, ?, ?)");
只需删除该运算符:
$stmt = $conn->prepare("INSERT INTO tblImage (fldImageID, fldMemberID, fldCatID, fldFilePath, fldName) VALUES (NULL, ?, ?, ?, ?)");
推荐阅读
- python - 尝试使用 SQLAlchemy 导入和创建数据库时收到“TypeError”
- aws-lambda - AWS Lambda NodeJS10.x - 加载共享库时出错:libXrender.so.1
- php - PHP获取url内容然后将表中的元素解析为JSON
- coq - John Major 等式的功能外延
- python - 无法在 Visual Studio Code 中配置测试
- c# - @html 在当前上下文中不存在
- ruby - Ruby 中的事件处理程序之前和之后
- c# - clickonce github 提交 setup.exe
- javascript - Javascript 新日期放假 15 天
- android - Android布局如何将textView与动态宽度水平对齐