gpt4 book ai didi

ColdFusion CFFILE 限制文本文件上传

转载 作者:行者123 更新时间:2023-12-04 01:00:21 24 4
gpt4 key购买 nike

我只想使用 CFFILE 上传来检测 .txt 文件。我尝试使用 file.clientfileext 来检测扩展名。当检测到 TXT 时,我会向用户显示一条弹出错误消息并删除该文件。但我被告知我什至不应该允许用户的文件到达我们的服务器。

然后我使用 CFFILE 接受属性只接受文本/纯文本。这应该可以做到,但不幸的是,在我尝试上传非文本文件时,我遇到了 ColdFusion 错误:

The MIME type of the uploaded file application/pdf was not accepted by the server. Only files of type text/plain can be uploaded. Verify that you are uploading a file of the appropriate type.

我尝试使用 cftry 和 cfcatch,但我仍然遇到相同的错误,这主要是由于浏览器上传文件时我不知道 MIME 类型。我也在这个论坛上发现了同样的问题并尝试了建议的答案,它没有用,仍然得到相同的错误消息(见下文)

我还在这个论坛中发现了另一个不建议使用 CF“accept”属性的帖子。提供此链接以获得更详细的说明:http://www.petefreitag.com/item/701.cfm

所以我的问题是,由于我仍在使用 CF8,实际上我没有很多选项可以阻止我的用户安全地上传 .txt 文件以外的文件?如果我不能使用 CFFILE 的接受属性,我至少可以通过执行以下操作来保护我的文件上传功能吗?但这样做是否足够安全?

  1. 将文件上传到不在根目录下的临时文件夹
  2. 验证文件扩展名
  3. 更改文件名,即使检测到扩展名是 .txt
  4. 移动文件到根目录下的目标文件

即使我执行这些步骤,我也必须允许文件到达我们的服务器,命令是不允许文件到达我们的服务器。

以下是上一个问题的答案/建议。但是当我测试它时它不起作用:

    <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>

最佳答案

如果您不喜欢使用 Accept,我认为您的步骤是合理的用于验证的属性。仅供引用,您可以将接受设置为 .txt而不是 MIME 类型。 MIME 类型由客户端确定,因此无论如何检查扩展名更安全。

cffile 属性验证失败抛出的异常可能没有 type ,因此您发布的代码尝试使用 FindNoCase() 检测它通过查看异常的 message .您可以转储异常并找出 FindNoCase() 的原因。未能捕捉到异常。

确保您将上传的任何内容视为潜在的恶意内容并且不对其进行处理(例如 cfinclude 它们)。将文件扩展名强制设置为 .txt 应该足够安全,但我会让其他安全专家参与进来。

关于ColdFusion CFFILE 限制文本文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22617125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com