所以,这里我有900多页代码,php代码,每一行1000多行,不超过20000 ...所有容易受到sql注入。因此,我不打算花费一年的大部分时间进入并在每个用户输入上合并mysql真正的转义字符串,而是计划编写一个程序来搜索代码行并将其输入到需要它的地方,例如每个岗位变量。有人认为这看似合理吗?如果是这样,你会推荐哪种语言?我有一些使用PHP的想法,但没有什么可靠的。而且我担心js会太慢。所有的帮助表示赞赏
答案 0 :(得分:2)
我不一定推荐这个,因为你实际上是在启用魔术引号,但是如果你没有时间正确修复它,那么你可以将它添加到引导文件中并将其包含在所有脚本中
foreach ($_POST as &$v) {
$db->escape($v); // mysql_real_escape_string() or mysqli or pdo
}
unset($v);
您需要修改此项以检查$ v是否为数组并相应地转义它们。你也想对$ _GET做同样的事情。
请注意,虽然这可能会阻止sql注入,但它可能会导致其他问题。我建议你抽出一些时间来重构。
答案 1 :(得分:1)
正如我在评论中提到的那样,已经有至少一个SO question要求使用静态分析工具来处理这个问题。如果有一个现有工具被多个其他项目使用,那么这通常会比任何人都没有使用的东西更值得信赖。
不幸的是,这个问题没有任何好的答案。快速搜索PHP静态分析器出现了PHP Source Code Security Framework和PHP_CodeSniffer,但除了他们的名字之外,我对这些内容一无所知,所以不要将其视为支持。
如果你必须自己构建它,你的Python标签意味着你想用Python编写它。通常情况下,我说这是一个很好的选择。但是对于这样的事情,从尽可能多的其他人那里获得支持对于能够信任你的代码至关重要,而且我认为你写的可能会有更多的支持,因为你可以肯定任何想要使用你的工具的人都会知道PHP。
还有一种可能的替代方法:如果您的代码遵循非常一致的样式,那么可能会做一些更简单的事情,尽管不是普遍适用,但确实会在您的特定代码中找到所有SQL注入漏洞。既然您正在尝试编写可以说服自己的代码是万无一失的,那么在这种情况下简单的好处可能是值得的。
对不起,这一切都很模糊,但这是一个非常含糊的问题。我真正可以说的是原则上它是合理的;我无法猜测它在实践中是否可行。