我有一个带有textarea的简单网页,当输入多行标签描述文本时,php脚本处理文本并将结果字符串输出为文本文件供用户下载。
页面本身只不过是一个textarea和一个自我发布的提交按钮。如果收到后期数据,它基本上会在文本框中创建一行文本行(使用explode("\n",$text)
,然后循环遍历每一行,并在行中创建每个文本部分的数组(使用{{1}最后,它接受数组中的每个元素并用它构造一个字符串。脚本中唯一使用的其他php函数是explode("\t",$text)
函数和date
函数以及几个{{} 1}}陈述。
当字符串完成后,使用一些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
文件发送到浏览器。
脚本工作正常,输出文件正确。我的问题是我将自己打开的是什么样的安全漏洞,是否可以关闭它们(以及如何关闭它们)。我希望该页面公开。
答案 0 :(得分:4)
由于您不会解释文本而执行任何代码以响应文本中找到的指令,因此&#39这里绝对没有安全问题。
您唯一需要注意的是使用特殊字符:您的输出使用具有特定含义的特定字符,即a_public_folder/year/month/day/..
。如果您的输入包含\n
,并且您将该低谷传递给输出,那么您的输出意义是否会发生变化?也许您需要转义或删除在输入中找到的任何\n
。