【问题标题】:how to encrypt a file before uploading in django如何在 django 中上传之前加密文件
【发布时间】:2020-11-19 17:55:57
【问题描述】:

我正在构建一个项目安全文件共享。它在上传到本地计算机之前加密文件,如果用户有解密密钥,则在下载时解密。我被困在如何在上传到我的电脑之前加密文件

我正在遵循下面提到的这种方法。

https://ruddra.com/documentation-of-django-encrypt-file/#basic-usage

但我不知道如何链接我的代码。谁能帮帮我

views.py

def upload(request):
    context={}
    if request.method == 'POST':
        upload_file= request.FILES["document"]
        fs=FileSystemStorage()
        name=fs.save(upload_file.name, upload_file)
        context['url'] = fs.url(name)
    return render(request, 'accounts/upload.html',context)

上传.html

{% include 'accounts/main.html'%}

<pre>
Upload your files for sharing
</pre>


{% block content %}

  <form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="document">
    <button type="submit">Upload</button>
  </form>
  {% if url %}

  <p> Uploaded file:<a href="{{ url }}">{{ url }}</a></p>
  {% endif %}

{% endblock %}

settings.py

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL= '/media/'

【问题讨论】:

    标签: python django cryptography aes


    【解决方案1】:

    要在上传到服务器之前加密文件,这意味着您需要在浏览器中对其进行加密 - 例如使用 JavaScript。这是一个可以帮助您在 JS 中加密内容的线程: JavaScript AES encryption and decryption (Advanced Encryption Standard)

    如果您愿意迎接挑战,请考虑在 WASM 中运行 AES 以加快加密速度(对大文件很重要)。

    请注意,在 Django 中,所有 python 代码都在服务器上执行。问题中的链接示例显示了如何在上传文件后加密服务器上的文件: https://ruddra.com/documentation-of-django-encrypt-file/#basic-usage

    请注意,上传前在浏览器上加密文件只是整个问题的一小部分。要拥有安全的文件共享服务,您可能希望有一种方法与需要解密它的其他用户共享密钥。为此,您可能需要使用非对称加密,例如,在上传之前使用其他用户的公钥包装(加密)密钥。

    【讨论】:

    • 我并不真正在安全领域,但我想说在保存模型时覆盖 django 的 save 方法来添加特定任务可以吗? (确实,您仍然需要确保正确删除任何临时文件,特别是在失败的情况下)。你认为这会引起什么问题吗?
    • @tgrandje django 的保存方法在服务器端执行 - 将文件传输到服务器后。然而,作者想要“在上传之前加密文件” - 因此需要在浏览器中完成(例如使用 Javascript)。
    • 对不起,我确实误读了这个问题......但我不确定在服务器端执行加密是否会有大问题(我实际上是在对你的最后一段做出反应,关于第一步在浏览器上加密文件):如果保存方法不存储加密密钥并确保清除任何临时文件,我会说它对于大多数用途来说已经足够了?
    • 那目的是什么? :) 在大多数情况下,不需要加密,只需适当的访问控制(包括全盘加密)就足够了。通常,安全是具有多层保护的风险管理。您可能有兴趣阅读 AWS 如何控制对用户数据的访问:aws.amazon.com/compliance/data-center/controls 如果访问控制正确,服务器端加密只能解决有限的场景(例如,攻击者无法访问在服务器被接管之前上传的数据)。我的意思是你可以做到,但我认为这不会给用户带来太多好处。
    猜你喜欢
    • 2015-06-18
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 2012-04-22
    相关资源
    最近更新 更多