我希望用户能够通过提供URL从网络上传图像。由于可能存在CORS问题和防止热链接,我认为我无法让客户端获取并上传图像,所以我让服务器来处理它。
最大的问题是用户简单地输入了
一些其他问题可能是用户提供解析为本地地址的主机名或提供公共URL重定向到本地地址。即使是LAN上的其他设备也是如此,它们通常是不可访问的。
过滤URL文本不是一个选项。我可以检查IP是否被路由到网关,并且目标是否在我的子网之外,然后才允许urllib继续。我可以阻止任何重定向,但这在某些情况下可能是一项有用的功能,因此我可以编写一个重定向处理程序来重新检查IP。现在这开始感觉像是一个补丁工作而不是一个很好的、强壮的处理所有情况的解决方案。
我还做一些基本的事情,比如使用
编辑:相关答案
最大的问题是用户简单地输入了
file:///home/user/secret_image.jpg
。该URL被发送到服务器,并被django愉快地获取,成为一个本地服务器端文件,供全世界查看。有没有办法限制对外部资源的请求?如何使这种方法变得安全(至少在某种程度上呢)?一些其他问题可能是用户提供解析为本地地址的主机名或提供公共URL重定向到本地地址。即使是LAN上的其他设备也是如此,它们通常是不可访问的。
过滤URL文本不是一个选项。我可以检查IP是否被路由到网关,并且目标是否在我的子网之外,然后才允许urllib继续。我可以阻止任何重定向,但这在某些情况下可能是一项有用的功能,因此我可以编写一个重定向处理程序来重新检查IP。现在这开始感觉像是一个补丁工作而不是一个很好的、强壮的处理所有情况的解决方案。
我还做一些基本的事情,比如使用
read(max_size)
来检查文件是否过大,使用python-magic来检查mimetype并选择一个扩展名,使用django-ratelimit
并在调用urlopen()
时设置超时。编辑:相关答案