php - 使用类别名称与类别 ID 将值传递给 $_GET
问题描述
我目前正在开发一个网站,一旦完成就会部署,所以我担心我的网站的安全性。
我了解到攻击者可以使用 $_GET 来进行 UNION 和 LOAD_FILE 攻击,因为通常人们会使用 .php?catId=1 来获取数据并将其显示在页面上。
但是我想知道是否通过使用 .php?catName=product_1 之类的名称来帮助防止攻击,因为获取数据的查询将变成这样:
$sql = "SELECT * FROM category_table WHERE category_name = '" 。$_GET['catName'] 。"'";
由于现在该值是一个字符串,因此查询需要一个单引号 (') 才能在不需要它之前工作,因为 id 是整数。
这个单引号能够阻止 UNION 查询,但我不确定这是否足够
解决方案
使用 Mysqli 准备:
$category_name = $_GET['catName'];
/* create a prepared statement */
if ($stmt = $mysqli->prepare("SELECT category_name FROM category_table WHERE category_name=?")) {
/* bind parameters for markers */
$stmt->bind_param("s", $category_name );
/* execute query */
$stmt->execute();
/* bind result variables */
$stmt->bind_result($category_name);
/* fetch value */
$stmt->fetch();
echo($category_name);
/* close statement */
$stmt->close();
}
更多信息: http: //php.net/manual/en/mysqli.prepare.php
再见 ;)
推荐阅读
- json - 无法将 JSON 数据发布到 GitHub API(可能还有其他)
- .net-core - 阻止 EF Core 使用合并插入
- sql - 通过 case 语句和标志进行 SQL 分区
- sql - 理解/优化 Postgresql 中的 SQL 查询
- html - 导航栏与标题重叠,框阴影不显示,无法更改 h1 字体大小
- javascript - 如何仅从Javascript中的完整路径中提取文件名+扩展名?
- ssh - 如何通过 ssh 连接到服务器上的特定计算机?
- ios - SwiftUI View 入门代码在添加到现有项目时抱怨“从非协议类型 'View' 继承”
- ipfs - 同一文件的 CID 是否不同但由 IPFS 中的 2 个用户上传?
- c - Visual Studio Code:参数未传递给 C 命令行应用程序