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

时间:2018-07-28 01:31:36

标签: php mysql sql

我目前正在开发一个网站,该网站一旦完成便会部署,因此我担心自己网站的安全性。

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

但是我想知道是否通过使用诸如.php?catName = product_1之类的名称来帮助保护免受攻击,因为获取数据的查询将变成这样:

$ sql =“ SELECT * FROM category_table WHERE category_name ='”。 $ _GET ['catName']。 “'”;

由于现在值是一个字符串,因此查询工作需要单引号('),因为id是整数,因此不需要查询。

此单引号可以阻止UNION查询,但不确定是否足够

1 个答案:

答案 0 :(得分:1)

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

再见;)