0

所以,我这里有 900+ 页代码,php 代码,每一个 1000+ 行,不超过 20000 行……都容易受到 sql 注入。因此,我没有花费一年的大部分时间在每个用户输入中加入 mysql 真正的转义字符串,而是计划编写一个程序来搜索代码行并将其输入到任何需要它的地方,例如在每个帖子变量。有人认为这合理吗?如果是这样,你会推荐用什么语言来做?我有一些使用 php 的想法,但没有什么可靠的。而且我担心js会太慢。感谢所有帮助

4

2 回答 2

2

我不一定建议这样做,因为您实际上是在打开魔术引号,但是如果您没有时间正确修复它,那么您可以将其添加到引导文件中并将其包含在您的所有脚本中

foreach ($_POST as &$v) {
    $db->escape($v); // mysql_real_escape_string() or mysqli or pdo
}
unset($v);

您将需要修改它以检查 $v 的数组并相应地转义这些数组。您还希望对 $_GET 执行相同的操作。

请注意,虽然这可能会阻止 sql 注入,但可能会导致其他问题。我建议花一些时间来重构。

于 2012-12-21T19:30:00.977 回答
1

正如我在评论中提到的,至少已经有一个SO 问题要求使用静态分析工具来处理这个问题。如果有一个现有的工具被多个其他项目使用,那通常比没有被任何人使用过的工具更值得信赖。

不幸的是,这个问题没有任何好的答案。对 PHP 静态分析器的快速搜索出现了PHP Source Code Security FrameworkPHP_CodeSniffer,但除了它们的名称之外,我对它们一无所知,因此不要将其视为认可。

如果您必须自己构建它,您的 Python 标签意味着您想用 Python 编写它。通常,我会说这是一个不错的选择。但是对于这样的事情,获得​​尽可能多的其他人的支持对于能够信任您的代码至关重要,而且我认为如果您编写代码,您可能会有更多的支持,只是因为您可以确定任何想使用您的工具的人都会知道 PHP。

还有另一种可能性:如果您的代码遵循非常一致的风格,则可以做一些更简单的事情,尽管不普遍适用,但确实可以在您的特定代码中找到所有 SQL 注入漏洞。由于您正在尝试编写可以说服自己万无一失的代码,因此在这种情况下,简单性的好处可能是值得的。

抱歉,这一切都太模糊了,但这是一个非常模糊的问题。我只能说原则上是合理的。我真的无法猜测这在实践中是否可行。

于 2012-12-21T20:05:43.957 回答