使用用户输入进行安全 MYSQL 查询

Safe MYSQL querying using user input

我只想检查我的 PHP-MYSQL 查询的安全性(如果有的话),我正在使用通过 $_POST 获得的用户数据,然后进行验证 - 验证所有数据的处理包括对字符串使用 mysqli_real_escape_string() 和 trim()。然而,我的一些输入的性质意味着我不限制用户输入的任何字符。我正在做的事情安全吗?如果不安全,如何改进。

插入查询示例(其中 $name 和 $description 是经过验证函数的 $_POST 数据值。)

    $sql = "INSERT INTO company(company_name, company_description) VALUES('".$name."', '".$description."')";
$result = mysqli_query($con, $sql);

select 查询示例(其中 $companyid 是用户输入,real_escaped 并被删除)

    $sql = "SELECT * FROM events WHERE event_company=".$companyid."";
$result = mysqli_query($con, $sql);

提前致谢。

有一种叫做 "SQL INJECTION" 的黑客可以欺骗您的控制。在那里阅读更多信息 https://www.veracode.com/security/sql-injection

您的查询已更新为使用 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();