我发现一些为网站编写的旧(2009(代码在某些情况下在搜索查询中确实将SQL保存为$_GET变量!
执行搜索时,详细信息被发布,然后进行清理,并且结果使用 MySQL 中的 LIMIT 子句进行分页。如果有多个页面(即 +30 个结果(,则这些页面是 HTML 中的锚链接,其中包含包含 SQL 语句的 GET var。
我知道,这绝对不是这样做的方法。这是我偶然看到的旧代码。这需要修复。
所以我修复了它,清理了它并使用另一种方法来重新加载 SQL,但是:
因此,我的问题是:
页面输出与缩略图相关的数据,所有数据都输出为命名数组 var(原始子句是 SELECT *
子句(,因此如果有人滥用 GET 变量,页面本身将仅输出名为
我已经设法使用 GET 滥用从数据库中删除行,我想这种滥用只有在结果不涉及任何返回的输出(例如 DELETE(时才有效,但我不知道; 所以鉴于用户可以在 GET 子句中输入任何内容,但只能获得编码内容的显示输出(即 30 行数组中的命名列(——这个大洞还能有什么其他滥用对?
更多细节:代码是MySQLi
像SQLMAP这样的工具可能会接管整个服务器,并用它做任何用户想要的事情。
拥有未经净化的数据库输入甚至不再是黑客攻击,而是等待有人在您的机器上运行脚本并从那一刻起基本上拥有它。
攻击者可以执行的操作取决于您的数据库配置和数据库用户访问权限。如果您创建一个仅具有选择该指定表的权限的新用户,并将该用户用于该特定脚本,则它可能造成的危害是从该表中读取数据。
这仍然是不好的做法。切勿使用它。