Language agnostic 如果我只对GET和POST数据进行消毒,我是否可以安全地进行注射?

Language agnostic 如果我只对GET和POST数据进行消毒,我是否可以安全地进行注射?,language-agnostic,code-injection,sanitization,Language Agnostic,Code Injection,Sanitization,我正在考虑最好的方法来清理我的数据,以防止注射攻击。有些人喜欢在输出之前或插入数据库之前立即进行清理。。。但我看到的问题有两个:1如果错过了一个参数/变量怎么办?2如果你消毒过度怎么办?这并不是说它会损害输出,但对你已经知道是安全的东西进行消毒并没有多大意义 例如,在PHP中,如果不使用$\u GET和$\u POST,我不能用以下内容包装它们: function get($var) { return my_sanitizer($_GET[$var]); } 还是这还不够?恶意代码还能

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

例如,在PHP中,如果不使用$\u GET和$\u POST,我不能用以下内容包装它们:

function get($var) {
    return my_sanitizer($_GET[$var]);
}
还是这还不够?恶意代码还能潜入哪里


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

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

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

您可以对$\u POST或$\u GET数组执行foreach操作,并对其进行清理

foreach($_POST as $key){ 
$\u POST[$key]=addslashes$\u POST[$key]
}

您可以对$\u POST或$\u GET数组执行foreach操作,并对所有

foreach($_POST as $key){ 
$\u POST[$key]=addslashes$\u POST[$key]
}有不止一种消毒方法,还有不止一种注射方法。例如,您通常希望在输出之前的某个时间清理或转义HTML和JS。但是适当的选择,例如,剥离所有HTML,允许在白名单中使用HTML,让用户输入其他内容,或者只是转义它,使其显示为文本,取决于应用程序

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


总之,一个自制的catch all my_消毒剂在获得任何数据后立即运行可能是错误的选择。

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

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


总之,如果您在获得任何数据后立即运行自制的catch all my_消毒剂,则可能是错误的选择。

但不建议使用此功能。您应该使用特定于数据库的函数,如mysqli_real_escape_string或更好的存储过程。此外,清理不仅仅针对SQL,如果您在页面上输出它,您需要考虑HTML和JS。但不建议使用此函数。您应该使用特定于数据库的函数,如mysqli_real_escape_string或更好的存储过程。此外,清理不仅仅针对SQL,如果您在页面上输出它,您需要考虑HTML和JS。对。我的头一定不能拧对:p我知道有不同种类的注射,但出于某种原因,我认为剥离或替换&在所有情况下都能奏效。我想这取决于你对这些数据做了什么。我的头一定不能拧对:p我知道有不同种类的注射,但出于某种原因,我认为剥离或替换&在所有情况下都能奏效。我想这取决于你对这些数据做了什么。