2009-11-19 66 views
0

如何检查$_SESSION['text']确实是文本而不是某些恶意的.exe?

,如果我这样做destroy_session(...),但设置

$a = $_SESSION; 

做$一个成为空了吗?

+0

在这方面没有办法确定。你可以做的最好的事情就是不要执行它(不要把它写到文件中也会有帮助) –

回答

1

只有您可以设置会话变量,因为会话数据存储在服务器端(通常位于tmp目录中的文件中)。但是这些数据是用类似于serialize的东西序列化的。所以实际的文件内容可能不是以适当的格式被执行。所以你不必担心那个文件会被错误地执行。

2

你为什么在意?你打算执行它吗?如果会话字段恰好包含可执行的二进制数据,那并不意味着它会执行

即使是文本字符串也可以包含可执行代码;取决于你如何执行它。它可能包含“rm -rf *”,如果你用“exec”运行它,你会遇到麻烦。没有任何过滤功能可以保证字符串在某些语言中不可执行。需要担心的是当你真的在执行执行,并使用一个变量作为它的一部分。

至于第二个问题,如果您在销毁会话之前复制了数组,则即使会话更改,副本也不会更改。所有PHP阵列都是如此。

+0

好的,你能回答我的第二个问题吗? – Gal

0

你可以使用is_string来知道它是否是一个有效的字符串,并使用prege_match($ _SESSION ['text'],'[a-z] +')等正则表达式,但我确认了JW所说的内容。

0

要回答你的第二个问题,不,它将是一个空的数组。

0

在发送到数据库之前,请将其长度限制为您期望的长度并使用addslashes()进行消毒。

你是否计划将它发送给系统调用?别。