gpt4 book ai didi

python - 在 Django 中验证上传的文件

转载 作者:IT老高 更新时间:2023-10-28 20:31:40 26 4
gpt4 key购买 nike

我正在工作的 Django 应用程序有一个 Event 模型。 Event 可能有关联的照片、静态 html 文件和 pdf 文件。

我希望允许受信任的用户上传这些文件,但我对安全性持谨慎态度,尤其是阅读了以下 in the Django docs (链接)。

Note that whenever you deal with uploaded files, you should pay close attention to where you're uploading them and what type of files they are, to avoid security holes. Validate all uploaded files so that you're sure the files are what you think they are. For example, if you blindly let somebody upload files, without validation, to a directory that's within your Web server's document root, then somebody could upload a CGI or PHP script and execute that script by visiting its URL on your site. Don't allow that.

如何验证不同类型的文件?我很想听听任何人处理这种事情的经验,或进一步阅读的链接。我有一种直觉,html文件可能太冒险了,在这种情况下,我会将上传权限限制为管理员。

最佳答案

所有答案都集中在验证文件上。这几乎是不可能的。

Django 开发人员不会要求您验证文件是否可以作为 cgi 文件执行。他们只是告诉你不要把他们放在他们处决的地方。

你应该把所有 Django 的东西放在一个专门的 Django 目录中。该 Django 代码目录不应包含静态内容。 不要将用户文件放在 Django 源代码库中。

如果您使用的是 Apache2,请查看基本 cgi 教程:http://httpd.apache.org/docs/2.0/howto/cgi.html

Apache2 可能设置为运行 ScriptAlias 文件夹中的任何文件。 不要将用户文件放在 /cgi-bin//usr/local/apache2/cgi-bin/ 文件夹中。

Apache2 可能设置为服务器 cgi 文件,具体取决于 AddHandler cgi-script 设置。 不要让用户提交带有 .cgi.pl 等扩展名的文件。

但是,您确实需要清理用户提交的文件,以便它们可以安全地在其他客户的计算机上运行提交的 HTML 对其他用户不安全。它不会损害您的服务器。您的服务器只会将其吐回给任何请求它的人。获取 HTML 清理程序。

另外,SVG 可能不安全。它过去有错误。 SVG 是一个包含 javascript 的 XML 文档,因此它可能是恶意的。

PDF 是……棘手的。您可以将其转换为图像(如果您确实需要),或提供图像预览(并让用户自行承担下载风险),但这对于尝试使用它的人来说会很痛苦。

考虑一个正常文件的白名单。嵌入在 gif、jpeg 或 png 文件中的病毒看起来就像一张损坏的图片(或无法显示)。如果您想偏执,请使用 PIL 将它们全部转换为标准格式(嘿,您还可以检查尺寸)。净化的 HTML 应该没问题(去掉脚本标签不是火箭科学)。如果清理过程很糟糕(或者你只是小心翼翼),我猜你可以把它放在一个单独的服务器上。

关于python - 在 Django 中验证上传的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1745743/

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