在从mysql迁移到PDO之前,我应该采取哪些安全措施?

时间:2015-03-18 15:51:06

标签: php mysql

我这个项目已经工作了7年。现在有数十人每天都在使用这个软件。

当我开始使用PHP 5.2.X时,我不知道mysql_会被弃用,所以我自由使用它。现在我正在运行PHP 5.4.4并且我觉得升级的紧迫性,但我的代码中有数千个mysql_query调用。迁移到PDO需要很长时间,但我知道必须最终完成

从一开始,我一直在清理每个帖子,get,cookie,请求数组的用户输入,如下所示:

$_POST = array_map_recursive('stripslashes', $_POST);
$_POST = array_map_recursive('mysql_real_escape_string', $_POST);

我使用.htaccess将此代码添加到此代码中,因此每个php文件都会将其添加到前面。 我知道这是错误的,但我开始编码对良好做法一无所知,也没有任何理由/时间来改变它。

我还在数组中保存所有(数千个)名称/值对输入,如select,radio,checkbox,我每次都会过滤它们。

问题:在我将每个mysql_函数更改为PDO之前,对我的代码产生的mysql注入或任何其他邮件攻击的可能威胁是什么?我的上面提到的过时的mysql_和全球清理的组合?对于使用数千个mysql_queries维护过时代码的开发人员,您对此临时解决方案有什么建议吗?

1 个答案:

答案 0 :(得分:1)

你真的很乱。您对全局转义的依赖意味着您的所有价值观在进入您的应用时都会受到损害。它们不再是用户提供的原始值,它们会随机发出新的反斜杠。但是,众所周知,这样做是一个糟糕的主意,你应该使用参数化查询并绑定你的值。

现在,这就是你的困境:如果你删除全局转义并切换到绑定值,所有依赖于全局转义的mysql调用都将容易受到SQL注入攻击。如果你只是离开全局转义并且另外绑定你的数据,它将包含随机的附加反斜杠。 stripslashes 可以干净地删除它们,或者它可能不会。它不是设计为un-mysqlescape字符串。你摆脱这个混乱的唯一真正的方法是一次性用准备好的语句替换所有mysql函数调用;一点一点地迁移几乎是不可能的。