如何检查$_SESSION['text']
是否确实是文本,而不是某些恶意的.exe?
AND ,如果我执行destroy_session(...)但设置
$a = $_SESSION;
$ a现在变为NULL吗?
答案 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您打算将其发送到系统调用吗?不。