首页 > 解决方案 > 使用类别名称与类别 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 查询,但我不确定这是否足够

标签: phpmysqlsql

解决方案


使用 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

再见 ;)


推荐阅读