1

我只是在考虑清理数据以防止注入攻击的最佳方法。有些人喜欢在输出之前立即清理,或者在插入数据库之前立即清理......但我看到的问题是双重的:(1)如果你错过了一个参数/变量怎么办?(2) 如果您过度消毒怎么办?并不是说它会损害输出,但是对您已经知道是安全的东西进行消毒没有多大意义。

例如,在 PHP 中,而不是使用$_GET$_POST我不能用类似的东西来包装它们:

function get($var) {
    return my_sanitizer($_GET[$var]);
}

或者这还不够吗?恶意代码还能潜入何处?


阅读下面的答案后,我意识到这个问题有点愚蠢。这取决于您是插入数据库还是输出 HTML。在这种情况下,也许最好在使用前进行。没关系,包装输出方法也很容易......

4

3 回答 3

5

消毒不止一种,注射也不止一种。例如,您通常希望在输出之前的某个时间对 HTML 和 JS 进行清理或转义。但适当的选择(例如,去除所有 HTML、允许 HTML 在白名单中、让用户输入其他内容,或者只是将其转义以显示为文本)取决于应用程序。

至于数据库注入,我同意 Nate 的观点,您应该为此使用准备好的语句(有时这些语句在内部使用转义,但这不是您关心的问题)。

总之,在获取任何数据后立即运行的自制包罗万象的 my_sanitizer可能是错误的选择。

于 2009-10-15T05:38:45.367 回答
1

就个人而言,我总是在您插入数据库之前进行清理;也就是说,如果您有一个基于 SQL 的数据库,则参数化 SQL 和存储过程是确保您不会注入任何会造成伤害的任何东西的方法。

于 2009-10-15T05:35:17.560 回答
1

你可以为 $_POST 或 $_GET 数组做一个 foreach 并清理所有

foreach($_POST as $key){ 

$_POST[$key] = addslashes($_POST[$key]) }

于 2009-10-15T05:37:06.440 回答