gpt4 book ai didi

php - 是否应该在 MySQL 查询中引用用户输入的数字以帮助避免 SQL 注入(inject)攻击?

转载 作者:太空宇宙 更新时间:2023-11-03 11:14:16 24 4
gpt4 key购买 nike

是否应该在 MySQL 查询中引用用户输入的数字以帮助避免 SQL 注入(inject)攻击?

假设我在页面上有一个表单,询问某人的年龄。他们输入他们的年龄并点击提交。以下 php 代码处理表单提交:(age 是 db 表中的一个 int 字段。)

$Number = mysqli_real_escape_string($dbc, $_POST["age"]);
$Query = "INSERT INTO details (age) VALUES ($Number)";
$Result = mysqli_query($dbc, $Query);

除此之外,将用户输入括在单引号中是否有任何好处,即使它不是字符串?像这样:

...
$Query = "INSERT INTO details (age) VALUES ('$Number')"; <-- quotes
...

执行 SELECT 怎么样?这是:

$ID = mysqli_real_escape_string($dbc, $_POST["id"]);
$Query = "SELECT * FROM users WHERE id = '$ID'";
$Result = mysqli_query($dbc, $Query);

优于:

$ID = mysqli_real_escape_string($dbc, $_POST["id"]);
$Query = "SELECT * FROM users WHERE id = $ID"; <-- no quotes
$Result = mysqli_query($dbc, $Query);

注意:我知道准备好的语句并且通常在字符串连接中使用它们,但这是我正在处理的遗留代码。我想尽我所能保护它。

最佳答案

如果添加数字,请使用 intval/floatval 函数,不要为这些使用 mysql_real_escape_string

对于你使用 mysql_real_escape_string 的所有内容,你必须使用引号,例如:

$input = "foo'bar";
$input = mysql_real_escape_string($input);
//foo\'bar
mysql_query("SELECT $input");
//SELECT foo\'bar
//which is still an SQL syntax error.

关于php - 是否应该在 MySQL 查询中引用用户输入的数字以帮助避免 SQL 注入(inject)攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6269685/

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