如果我没有写入数据库,我该如何清理用户输入?

时间:2016-05-20 01:11:31

标签: php html security user-input

我有一个带有textarea的简单网页,当输入多行标签描述文本时,php脚本处理文本并将结果字符串输出为文本文件供用户下载。

页面本身只不过是一个textarea和一个自我发布的提交按钮。如果收到后期数据,它基本上会在文本框中创建一行文本行(使用explode("\n",$text),然后循环遍历每一行,并在行中创建每个文本部分的数组(使用{{1}最后,它接受数组中的每个元素并用它构造一个字符串。脚本中唯一使用的其他php函数是explode("\t",$text)函数和date函数以及几个{{} 1}}陈述。

当字符串完成后,使用一些strtotime函数(foreachheader()等)将字符串作为文本文件发送到浏览器。因此,假设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 文件发送到浏览器。

脚本工作正常,输出文件正确。我的问题是我将自己打开的是什么样的安全漏洞,是否可以关闭它们(以及如何关闭它们)。我希望该页面公开。

1 个答案:

答案 0 :(得分:4)

由于您不会解释文本而执行任何代码以响应文本中找到的指令,因此&#39这里绝对没有安全问题。

您唯一需要注意的是使用特殊字符:您的输出使用具有特定含义的特定字符,即a_public_folder/year/month/day/..。如果您的输入包含\n,并且您将该低谷传递给输出,那么您的输出意义是否会发生变化?也许您需要转义删除在输入中找到的任何\n