题
我正在开发一个小型 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。
任何策略都可能分为以下两种(如果可能的话,三种)方式:
当超过高水位线时,
- 删除最旧/最不想要的数据以腾出空间
- 删除传入数据以避免变满
- 暂停传入数据,直到回到低水位线以下
2 和 3 仍然需要您以某种方式找到新的存储空间,因此要么必须删除某些内容,要么需要更多的存储空间。1 是相当自我维护的,但是可以通过发送足够的新垃圾来清除其中所有有用的旧数据。建立一个排名系统(最后访问的、访问次数最多的、由特权用户加载的、这些的组合......)并删除最不重要的可能是最好的平衡事情。
不隶属于 StackOverflow