Python POST-REDIRECT-GET使用解密流而不是html文档
我正在使用磁盘加密来保护一些客户端数据。登录后,用户必须提供另一个对称密钥才能从磁盘解密文件:Python POST-REDIRECT-GET使用解密流而不是html文档,python,django,encryption,django-views,Python,Django,Encryption,Django Views,我正在使用磁盘加密来保护一些客户端数据。登录后,用户必须提供另一个对称密钥才能从磁盘解密文件: from django.shortcuts import render_to_response, RequestContext from django.contrib.auth.decorators import login_required from django.http import HttpResponse from django.conf import settings from djan
from django.shortcuts import render_to_response, RequestContext
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from django.conf import settings
from django.template import Template
from my_lib import decrypt_file
import os
import magic
@login_required
def secret_stuff(request):
if not request.method == 'POST':
return render_to_response('reenter_key.html', context_instance=RequestContext(request))
password = request.POST.get('symmetric_key')
encrypted_file = os.path.join(settings.BASE_DIR, 'templates', 'secret.enc')
byte_string = decrypt_file(password, encrypted_file)
file_type = magic.from_buffer(byte_string)
if b'data' in file_type:
return render_to_response('bad_key.html', context_instance=RequestContext(request))
decrypted = Template(byte_string)
return HttpResponse(decrypted.render(RequestContext(request)))
这种设计对于用户来说很烦人,因为页面重新加载是post请求。如果不将解密后的文件保存到磁盘上,如何避免这种情况发生?您的意思是要避免每次用户访问数据时强制用户重新输入密钥 这意味着您必须将密钥保存在可由多个进程访问的位置。在Django中保存每个用户数据的常用方法是使用。问题是,您不希望密钥比解密文件更容易访问(因此可能不在数据库或磁盘中) 您可以将用于会话(或者,如果您已经将会话用于其他内容,则跳过会话并手动缓存它)。不过,如文档中所述,本地内存缓存是不合适的 您可以使用memcached或redis,当然,任何有权访问缓存的人都会容易受到密钥的攻击。如果缓存引擎在一个单独的外部服务器上运行,那么您必须担心通过网络发送密钥(尽管也可能使用SSL) 最后,在安全性和用户的便利性之间需要进行权衡,因此您必须确定您担心的攻击向量以及足够好的安全程度