使用用户输入安全MYSQL查询
问题描述:
我只是想检查我的PHP-MYSQL查询有多安全(如果有的话),我使用的是通过$ _POST进行验证的用户数据,然后验证 - 所有数据的验证过程包括对字符串和trim()使用mysqli_real_escape_string()。然而,我的一些输入的性质意味着我不限制用户输入中的任何字符。我在做什么是安全的,如果不是如何改善的话。使用用户输入安全MYSQL查询
插入查询的示例(其中$ name和$描述的是已通过验证函数$ _POST数据值。)
$sql = "INSERT INTO company(company_name, company_description) VALUES('".$name."', '".$description."')";
$result = mysqli_query($con, $sql);
选择查询的一个实例(其中$ companyid是用户输入,real_escaped和剥离)
$sql = "SELECT * FROM events WHERE event_company=".$companyid."";
$result = mysqli_query($con, $sql);
在此先感谢。
答
这里是您的查询更新为使用mysqli预准备语句。
$sql = "INSERT INTO `company` (`company_name`, `company_description`) VALUES(?, ?)";
$stmt = $con->prepare($sql);
$stmt->bind_param('ss',$name,$description); // ss is for string string
$stmt->execute();
$result = $stmt->get_result();
和
$sql = "SELECT * FROM `events` WHERE `event_company` = ?";
$stmt = $con->prepare($sql);
$stmt->bind_param('i',$companyid); // i indicates integer
$stmt->execute();
$result = $stmt->get_result();
你的查询是不是安全可言,你需要使用PDO或mysqli的准备语句 – cmorrissey
感受一下SQL注入的后果** [这里](https://开头xkcd.com/327/)**,如果你不想处理它,请阅读** [这个相当全面的问题/答案](https://*.com/questions/60174/如何防止SQL注入在PHP)** – YvesLeBorg
'mysqli_real_escape_string'不会保护您的选择查询。你可以用'$ company =“1或event_company = 2来试试';'。如果1和2在你的数据库中,你会得到两个。 – jh1711