我有一个简单的网页,其中有一个文本区域,当输入多行选项卡描绘的文本时,php脚本会处理文本,并将结果字符串输出为文本文件供用户下载。
页面本身不过是一个文本区域和一个向自己发布的提交按钮。如果接收到后数据,它基本上在文本框中创建一个文本行数组(使用explode("n",$text)
,然后循环遍历每一行,并创建该行中每一段文本的数组(使用explode("t",$text)
。最后,它获取数组中的每个元素,并用它构造一个字符串。脚本中唯一使用的其他php函数是date
函数和strtotime
函数以及几个foreach
语句。
字符串完成后,使用几个header()
函数(Content-Disposition: attachment;
、Content-Type:
等)将字符串作为文本文件发送到浏览器。因此,假设$str
是字符串,它就是这样发送到浏览器的:
header('Content-Disposition: attachment; filename="file.txt"')
header('Content-Type: text/plain');
header('Content-Length: ' . strlen($str));
echo $str;
exit();
例如,假设提供的文本是这样的(假设文本之间的空格是制表符)
John Smith Freshman
Jane Doe Sophomore
然后脚本创建如下字符串:
Student:nfirstname:Johnnlastname:SmithnYear:FreshmannEndStudentnStudent:nfirstname:Janenlastname:DoenYear:SophomorenEndStudentn
该脚本将作为text/plain
文件发送到浏览器。
脚本运行良好,输出文件正确。我的问题是,我让自己打开了什么样的安全漏洞,有可能关闭它们吗(以及如何关闭它们)。我希望这个页面是公开的。
由于您从未解释文本,并且执行任何代码以响应文本中的指令,因此这里绝对没有安全问题。
您唯一需要注意的是使用特殊字符:您的输出使用具有特定含义的特定字符,即n
。如果你的输入包含一个n
,并且你按原样将这个波谷传递给输出,那么你的输出的意义会改变吗?也许您需要转义或删除输入中的任何n
。