php - 使用类别名称与类别 ID 作为传递给 $_GET 的值

标签 php mysql sql

我目前正在开发一个网站,该网站将在完成后进行部署,因此我很担心我网站的安全性。

我了解到攻击者可以使用 $_GET 进行 UNION 和 LOAD_FILE 攻击,因为通常人们会使用 .php?catId=1 来获取数据并将其显示在页面上。

但是我想知道通过使用名称而不是 .php?catName=product_1 是否有助于防止攻击,因为获取数据的查询将变成这样:

$sql = "SELECT * FROM category_table WHERE category_name = '". $_GET['猫名'] 。 "'";

因为现在该值是一个字符串,所以查询需要单引号 (') 才能在之前不需要单引号 ('),因为 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

再见;)

关于php - 使用类别名称与类别 ID 作为传递给 $_GET 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51567300/

相关文章:

php - 在服务器 : How to fix? 上找不到本地主机或 phpMyAdmin

php - 如何在对话框中回显日期的 jQuery AJAX POST 值

php - 选择多个选项中的很少条目在数据库中为空

mysql - 与平均值和长度相关的 SQL 查询

MySQL NOT IN 语法可转换为 JOIN?

php - 使用 PHP 和 AJAX 的 INSERT 问题

php - PHP 中的 CRUD 操作...在 edit.php 中出现错误

mysql - 为什么 MySQL 不在用作 bool 值的 int 字段上使用索引?

mysql - 当函数中涉及非数字值时,sql返回空字符串?

MySQL 想要左表中的所有结果,并仅使用条件过滤右表