【发布时间】:2014-05-02 06:22:25
【问题描述】:
我想使用 CFFILE 上传仅检测 .txt 文件。我尝试使用 file.clientfileext 来检测扩展名。当检测到 TXT 时,我会向用户显示弹出错误消息并删除文件。但有人告诉我,我什至不应该让用户的文件到达我们的服务器。
然后我使用 CFFILE 接受属性只接受文本/纯文本。这应该可以,但不幸的是,当我尝试上传非文本文件时,在我的测试中出现 ColdFusion 错误:
上传文件 application/pdf 的 MIME 类型未被接受 服务器。只能上传 text/plain 类型的文件。核实 您正在上传适当类型的文件。
我尝试使用 cftry 和 cfcatch 但我仍然收到相同的错误,这主要是由于我不知道浏览器何时上传文件的 MIME 类型。 我也在这个论坛发现了同样的问题,并尝试了建议的答案,它没有用,仍然得到相同的错误信息(见下文)
我还在这个论坛上发现了另一个帖子,不建议使用 CF “accept” 属性。提供此链接以获得更详细的说明:http://www.petefreitag.com/item/701.cfm
所以我的问题是,由于我仍在使用 CF8,实际上我没有太多选项来阻止我的用户安全上传 .txt 文件以外的文件? 如果我不能使用 CFFILE 的接受属性,我至少可以通过执行以下操作来保护我的文件上传功能吗?但是这样做是否足够安全?
- 将文件上传到不在根目录下的临时文件夹
- 验证文件扩展名
- 即使检测到扩展名为 .txt,也要更改文件名
- 将文件移动到根目录下的目标文件
即使我执行了这些步骤,我也必须允许文件到达我们的服务器,顺序是不允许文件到达我们的服务器。
以下是上一个问题的答案/建议。但是当我测试它时它不起作用:
<CFTRY>
<cflock name="write_lock" type="Exclusive" timeout="120">
<cffile action="upload" filefield="filepath" destination="#DestDir#"
nameconflict="Overwrite" attributes="Archive">
</cflock>
<CFCATCH>
<cfif FindNoCase("not accepted", cfcatch.Message)>
<script>
$(function(){
alert("Only the following file types are allowed: .jpg, .gif, .bmp,
.png.");
});
</script>
<cfabort />
<cfelse>
<!--- looks like non-MIME error, handle separately --->
<cfdump var="#cfcatch#" abort />
</cfif>
</CFCATCH>
</CFTRY>
【问题讨论】:
标签: coldfusion