【发布时间】:2017-08-31 15:34:43
【问题描述】:
我只想检查我的 PHP-MYSQL 查询的安全性(如果有的话),我正在使用通过 $_POST 然后验证的用户数据 - 所有数据的验证过程包括使用 mysqli_real_escape_string()字符串和修剪()。然而,我的一些输入的性质意味着我不限制用户输入的任何字符。我正在做的事情是否安全,如果不是,如何改进。
插入查询示例(其中 $name 和 $description 是已通过验证函数的 $_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);
提前致谢。
【问题讨论】:
-
你的查询一点都不安全,需要使用PDO或者mysqliprepared statements
-
感受一下 SQL 注入的后果 here ,如果您不想处理它,请阅读 this fairly comprehensive question/answers on the topic.
-
mysqli_real_escape_string根本不会保护您的选择查询。你可以试试$company="1 or event_company=2";。如果 1 和 2 在你的数据库中,你会得到两个。