我在想下面的代码注入漏洞是否在fwrite中?
foreach($_POST as $key=>$val) {
fwrite($fh, "\nPOST variable named " . $key . " has the value " . $val);
}
我应该在将它们写入日志文件之前以某种方式清理这些值吗?
UPDATE。 fh是日志文件处理程序
我在想下面的代码注入漏洞是否在fwrite中?
foreach($_POST as $key=>$val) {
fwrite($fh, "\nPOST variable named " . $key . " has the value " . $val);
}
我应该在将它们写入日志文件之前以某种方式清理这些值吗?
UPDATE。 fh是日志文件处理程序
只要日志文件被其使用者视为纯文本(它应该始终),就没有漏洞。
如果您决定输出日志文件的未处理内容作为HTML的一部分,那么这将是一个真正的漏洞(可能并不是非常严重的实际影响,但仍然)。但是这个问题可能与在HTML中显示文本的“其他”代码无关,而不会调用htmlspecialchars
,而不是在这里简单地写日志的代码。
这将取决于什么$fh
是。如果$fh
是一个HTML文件,您可能会遇到麻烦。不是真的,如果它是一些文本文件或外部任何浏览器无法访问。
在HTML输出的情况下使用htmlspecialchars(..)
总是一个好主意。
UPDATE:
是没有问题的,只要:
text/html
标题并将其视为正常文本文件(如果可访问)谢谢,我正在更新这个问题,提到它是一个日志文件处理程序 – Andrei 2012-07-13 08:48:42
“不是真的,如果它是某个文本文件,或者是外部任何浏览器都无法访问的。”这很有趣,所以我应该把日志文件放在一个隐藏文件夹中,或者配置htaccess。 – Andrei 2012-07-13 08:52:10
正如其他人所指出的,当浏览器能够访问它时,它只有一个问题**,并且将其解释为HTML。 – SuperSaiyan 2012-07-13 08:53:56
try htmlentities();之前或之后(但只有一次),并使用mysql_real_escape_string – Waygood 2012-07-13 08:37:03
@Waygood:'htmlentities'只适用于HTML输出。 'mysql_real_escape_string'只适用于使用mysql扩展的情况,这种情况不应该发生在新代码中,因为mysql扩展已过时并被弃用。 – outis 2012-07-13 08:41:00
没有规定数据的使用位置,所以在浏览器中查看是我最初的想法(与Jon相同)。 – Waygood 2012-07-13 08:43:28