我目前正在开发一个网站,该网站一旦完成便会部署,因此我担心自己网站的安全性。
我了解到,攻击者可以使用$ _GET进行UNION和LOAD_FILE攻击,因为通常人们会使用.php?catId = 1来获取数据并将其显示在页面上。
但是我想知道是否通过使用诸如.php?catName = product_1之类的名称来帮助保护免受攻击,因为获取数据的查询将变成这样:
$ sql =“ SELECT * FROM category_table WHERE category_name ='”。 $ _GET ['catName']。 “'”;
由于现在值是一个字符串,因此查询工作需要单引号('),因为id是整数,因此不需要查询。
此单引号可以阻止UNION查询,但不确定是否足够
答案 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
再见;)