我正在开发一个小型 CGI 应用程序(用 C 语言,使用 CGIC, http://www.boutell.com/cgic/)。我的应用程序需要创建一个临时文件(用户上传图像,以各种方式保存,修改,然后向用户显示)。

创建临时文件时应采取哪些预防措施?

修改后的图像由 CGI 脚本动态提供,然后从磁盘中删除临时文件:

像这样的东西:<html><head><title>here's your modified image</title></head><body><img src="cgi-bin/genimage.cgi?uid=5423423 /></body>

然而,恶意用户可能上传图像但从不请求修改后的图像,从而填满硬盘。

我应该定期删除未使用的文件吗?

非常感谢!

有帮助吗?

解决方案

如果您的存储空间有限,并且传入的数据量未知,则您需要决定当有更多数据可存储时该怎么办。这会以某种方式出现。如果您假装提供无限存储空间,那么当您无法提供时就会出现 DoS。

任何策略都可能分为以下两种(如果可能的话,三种)方式:

当超过高水位线时,

  1. 删除最旧/最不想要的数据以腾出空间
  2. 删除传入数据以避免变满
  3. 暂停传入数据,直到回到低水位线以下

2 和 3 仍然需要您以某种方式找到新的存储空间,因此要么必须删除某些内容,要么需要更多的存储空间。1 是相当自我维护的,但是可以通过发送足够的新垃圾来清除其中所有有用的旧数据。建立一个排名系统(最后访问的、访问次数最多的、由特权用户加载的、这些的组合......)并删除最不重要的可能是最好的平衡事情。

其他提示

用于直接应用设计使用CGI是可疑的 - 即,不是一个web的框架/应用引擎。我会建议使用Java进行图像处理,或在Lua或Python或东西包裹。

如果您继续使用C确保你把限制CGI执行环境,把它放在一个监狱,检查的这个帖子了一些灵感,此处是另一个。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top