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

时间:2017-08-31 15:34:43

标签: php mysql php-5.5

我只想检查我的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);

选择查询的示例(其中$ companyid是用户输入,real_escaped和stripped)

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

提前致谢。

2 个答案:

答案 0 :(得分:1)

有一种叫做" SQL INJECTION"这可能会欺骗你的控制。请阅读此处了解更多信息https://www.veracode.com/security/sql-injection

答案 1 :(得分:1)

以下是您更新的查询以使用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();
相关问题