mpe*_*pen 1 language-agnostic sanitization code-injection
我只是在考虑清理数据以防止注入攻击的最佳方法.有些人喜欢在输出之前立即消毒,或者在插入数据库之前立即进行消毒......但我看到的问题有两个:(1)如果你错过了一个参数/变量怎么办?(2)如果你过度消毒怎么办?并不是说它会伤害输出,但是你已经知道的清洁消息并不是很安全.
例如,在PHP而不是使用$_GET,$_POST我不能用以下内容包装:
function get($var) {
return my_sanitizer($_GET[$var]);
}
Run Code Online (Sandbox Code Playgroud)
或者那还不够?还有哪些恶意代码可以潜入?
在阅读下面的答案后,我意识到这个问题有点愚蠢.这取决于您是插入数据库还是输出HTML.在这种情况下,也许是更好的只是在使用前做的.没关系,这也很容易包装输出方法......
有不止一种消毒,不止一种注射.例如,您通常希望在输出之前清理或转义HTML和JS.但是适当的选择(例如,剥离所有HTML,允许HTML在白名单中,使用户输入其他内容,或者只是将其转义为显示为文本)取决于应用程序.
至于数据库注入,我同意Nate你应该使用预备语句(有时这些使用内部转义,但这不是你关心的).
总之,在获取任何数据后立即运行的自制catch-all my_sanitizer 可能是错误的选择.