旧的凌乱的PHP代码和MySQL注入

时间:2014-05-22 06:21:22

标签: php mysql sql-injection

我对我的一个旧项目感到头疼。我想在网上重新安装我曾经管理过的网站的遗留版本。问题是,它是在1998年以后用PHP编写的,当时我对安全问题几乎没有任何了解(15yo在脚本编写的东西上学习了第一课)。当我现在检查代码时,我可以看到很少有可能造成的伤害,因为大多数代码都做了基本的事情而没有太多篡改易受攻击的资产。有一个例外,MySQL查询。我有几千个选择,插入和更新,对于任何MySQL注入尝试都是开放的。项目很大,有很多文件和很多代码。即使我搜索并检查mysql_query的每一个出现,我仍然可能会遗漏一些东西。很多乱七八糟的东西。这样的事情到处都是:

        function Mess($ID) {
    $result = mysql_query("select * from table where `id` LIKE '$ID'"); 
}

我在想是否可能有一些简单的方法来解决这个问题,而无需花费数小时和数小时来检查每一个MySQL查询。更不用说创建所有的PDO结构并试图用这种怪物来进行凹版印刷。我只是在业余时间这样做,以纪念多年前致力于为该项目创建内容的许多人。所以我在考虑某种"一般"解。我正在考虑 php prepend file 但是我可以在那里插入什么不会削弱传入的变量?我可以杀死所有GET,POST,COOKIE vars,但这会阻止网站正确提供内容。对于数据库用户,我可以禁用所有除SELECT访问权限(我不需要更多,因为这个项目不需要更新),然后禁止错误消息,但仍然可以打开它进行注入,只是没有可能修改数据库。是否有人意识到我不是某种东西,而这种东西会超越"问题?我不介意是否有人能够篡改变量来查看该特定数据库的单元内容。该数据库中没有任何内容是私有的(我删除了密码,电子邮件等内容)。但请注意存储在该主机上的其他数据的安全性和完整性。

2 个答案:

答案 0 :(得分:3)

SQL注入没有一个通用的解决方案。如果有,他们会将其构建到每个编程语言和框架中,然后SQL注入将不再是一个问题。他们尝试使用魔术引号,但它没有用完,而且该功能现已弃用。

有关保护方法的详细信息,请参阅我的演示文稿SQL Injection Myths and Fallacies

如果您想尊重这个旧项目,我建议您截取一些截图并将其作为静态图片发布。


  比尔,你有基于那个演讲的演讲吗?

您可以在此处查看此网络研讨会(免费但需要注册):
http://www.percona.com/webinars/2012-07-25-sql-injection-myths-and-fallacies

我还在旧金山的MySQL聚会上发表了这篇文章:
https://www.youtube.com/watch?v=o4dJ7hdA8fs

答案 1 :(得分:-2)

要降低风险,请使用可以执行基于正则表达式搜索的编辑器,并立即替换所有文件(例如netbeans或notpad ++)并在

上运行搜索
(mysql_[a-z]+\("[^$"]+)(\$[a-z][a-zA-Z0-9]*)

并将其替换为

$1" . mysql_real_escape\($2\) . "

这应该可以逃避所有查询。在尝试之前做一个备份!!! ; - )