gpt4 book ai didi

php - 仅使用 php 防止 SQL 注入(inject)

转载 作者:可可西里 更新时间:2023-11-01 06:39:15 24 4
gpt4 key购买 nike

我的想法是,我有一个完整的工作网站,可以多次调用 MySQL 服务器,并且在这个网站上做了一些研究,我看到以这种形式进行查询:

$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));

我可以解决安全问题,但是,正如我所说,我对 MySQL 服务器有很多调用,解决问题的最佳方法(在我的例子中)是直接转到传递给查询的变量,但是没有使用 MySQL 函数,因为我不在查询范围内。让我解释一下,我有这个:

mysql_query("SELECT * FROM `post` WHERE id=" . $_GET['edit']);

我无法修改此查询,因为我的所有代码中都有很多这样的内容,我更喜欢检查 var $_GET['edit'] 上的注入(inject)。

我如何使用纯 PHP 检查查询变量上的 SQL 注入(inject)?喜欢:

$_GET['edit']=freehack($_GET['edit']);

最佳答案

不要这样做。通过将 $_GET 参数的值替换为“安全”版本,您正在污染您的输入数据,您可能需要将其用于其他地方。

只有在需要在数据库层使用数据时才对数据进行转义。它只需要一点时间来解决您的问题,从长远来看会为您省去很多麻烦。

无论如何,您所做的仍然不安全!参见:PHP: Is mysql_real_escape_string sufficient for cleaning user input?

你真的应该使用 prepared queries with PDO .此外,在查询中使用之前,您应该检查用户输入的有效性。

关于php - 仅使用 php 防止 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4806450/

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