gpt4 book ai didi

php - 如果在查询中不考虑用户输入,使用 mysqli_query() 是否危险?

转载 作者:可可西里 更新时间:2023-11-01 08:30:10 24 4
gpt4 key购买 nike

每当我想运行 MySQL 查询时,我都会准备语句:

$query = "SELECT * FROM users WHERE name = ?";
$stmt = mysqli_stmt_init($con);
$stmt->prepare($query);
$stmt->bind_param('s', $_POST['user']);
$stmt->execute();
$result = $stmt->get_result();
$assoc = mysqli_fetch_assoc($result);

但是,如果我根本不接受用户的任何信息怎么办?这是:

$query = "SELECT * FROM users";
$stmt = mysqli_stmt_init($con);
$stmt->prepare($query);
$stmt->execute();
$result = $stmt->get_result();
$assoc = mysqli_fetch_assoc($result);

与以下一样安全:

$assoc = mysqli_fetch_assoc(mysqli_query($con, "SELECT * FROM users"));

请记住,用户在创建帐户时可能仍然输入了 SQLi 语句,现在我在没有准备的情况下选择了它。

如果我只是选择一个只存储数字的列(数据类型是 double )怎么办:

$assoc = mysqli_fetch_array(mysqli_query($con, "SELECT version FROM users ORDER BY version LIMIT 1"))[0];

最佳答案

通常,使用 PDO 绑定(bind)变量是实现一致的、我不必考虑注入(inject)开发的最佳方法。

当您完全控制查询时,除了让自己习惯性地随时接触良好实践外,没有理由需要准备它。

作为旁注,我会避免在任何生产代码中使用 * 并明确指定您想要的字段。

我会清理您当前的用户输入数据,以避免对过去可能输入的内容产生任何担忧。

关于php - 如果在查询中不考虑用户输入,使用 mysqli_query() 是否危险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28922271/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com