PHP检查$ _SESSION ['text']是否为文本

时间:2009-11-19 19:15:20

标签: php

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

AND ,如果我执行destroy_session(...)但设置

$a = $_SESSION;

$ a现在变为NULL吗?

5 个答案:

答案 0 :(得分:2)

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

即使是文本字符串也可以包含可执行代码;取决于你如何执行它。它可以包含“rm -rf *”,如果你用“exec”运行它,你就会遇到麻烦。没有多少过滤可以保证字符串在某种语言中不可执行。担心这一点的时间是你实际执行的时间,并使用变量作为其中的一部分。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

Ora您打算将其发送到系统调用吗?不。