我目前正在开发一个网站,该网站将在完成后进行部署,因此我很担心我网站的安全性。
我了解到攻击者可以使用 $_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/