gpt4 book ai didi

php - (int) php和mysql注入(inject)

转载 作者:行者123 更新时间:2023-11-29 04:15:40 26 4
gpt4 key购买 nike

据我所知,保护您的网站免受 SQL 注入(inject)的最安全方法是使用准备好的语句。但是,如果用户输入被转换为数字,那么如何解决这个问题呢?

$id = (int)$_GET['id'];

最佳答案

But how does someone can go around this if user input is converted to a number?

简单地说,他们不能,故事结束/碰壁。因为它被类型转换为 integer ,它不能被修改或操纵。

只有有权力修改它,如果您愿意/必须的话。

例如:

$string = "String";
$id = (int)$_GET['id'];
echo $new_value = $string . "" . $id;

生成String123

var_dump($new_value); 将生成 string(9) "String123"

但是现在,这将是一个字符串,所以您不希望这样,但这只是为了向您展示事后可以做什么。

由于 SQL 注入(inject)通常包含 '-DELETE 等字符或任何其他非整数并传递给如果被潜在的黑客攻击,该声明将被拒绝。

file.php?id=123并在URL中修改如file.php?id=String');删除表用户; -- 不会“通过 GO”,可以这么说。

您可以做的是检查数组中传递的内容是否确实是整数。

有几个函数可以检查这一点。

但是,使用准备好的语句也会有好处。 mysqli_ 和 PDO API 都提供此功能。

当使用 mysqli_ api 时,然后使用诸如以下内容:

bind_param("i", $id) (i 代表“整数”)。即使有人确实设法传递了除整数之外的其他内容,mysql 仍然会拒绝让它通过,因为它也通过绑定(bind)参数转换为整数。

但是,如果是 bind_param("s", $id) - (“s”代表“字符串”),那么这可能是一个不同的游戏。

PDO 也有这个,即 PDO::PARAM_INT

话虽如此;无论如何,坚持使用准备好的语句。

关于php - (int) php和mysql注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48548366/

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