背景:我有一个人们可以存储交易的网站。作为此次交易的一部分,他们可以根据需要附上收据。
问题:如果允许用户将任何类型的文件扩展名上传到我的网站,是否存在安全风险?
的信息:
更多信息:我原本打算将文件限制为“pdf / doc / docx” - 但后来意识到有些人可能想要存储jpg或.xls等 - 并实现他们“可能”想要存储的文件列表非常大......
编辑:该文件将存储在public_html之外 - 并通过“readfile()”函数提供服务,该函数接受文件名(不是路径) - 所以有什么东西可以“扰乱”readfile ()?
答案 0 :(得分:3)
“用户没有机会”运行“文件”
只要您100%确定这一点是正确的,那就是安全的。但是,请确保Web服务器无法执行该文件。例如,如果用户上传.php文件,请确保服务器不执行它。
计算机不会自己神奇地运行程序,所以基本上你只需要确保用户无法欺骗你的服务器运行该文件。这意味着如果文件位于Web根目录下,则确保禁用正确的处理程序,如果不是(通常echo file_get_contents('/path/to/upload')
使用其他逻辑),则通过代理脚本传递它们
另一种选择是将文件存储为name.upload
,但这需要保留一个映射到存储名称的原始名称列表。
答案 1 :(得分:3)
是的,除非您采取预防措施,否则绝对存在安全风险。可以说,要重新下载文件,必须使用example.com/uploads/{filename}
。用户可以上传恶意PHP文件,然后转到example.com/uploads/malicious.php
“重新下载”它。当然,这会导致PHP脚本在您的服务器上执行,从而为他提供足够的能力来完全破坏所有内容。
要防止出现这种情况,请创建一个接收文件名作为参数的页面,然后使用正确的content-type
将该页面提供给用户。
类似于example.com/files?filename=malicious.php