Python Django查看安全性和最佳实践
我最近开始开发Django,现在我的应用程序即将完成,我开始思考安全性和最佳实践 我有一个生成页面的视图和页面中的不同函数,将AJAX请求发布到各个视图。例如,我有一个名为show_employee的视图,我可以通过向视图delete_employee和update_employee传递一个post请求来删除和更新员工Python Django查看安全性和最佳实践,python,django,security,django-views,Python,Django,Security,Django Views,我最近开始开发Django,现在我的应用程序即将完成,我开始思考安全性和最佳实践 我有一个生成页面的视图和页面中的不同函数,将AJAX请求发布到各个视图。例如,我有一个名为show_employee的视图,我可以通过向视图delete_employee和update_employee传递一个post请求来删除和更新员工 我将@login\u必需的装饰器放在每个视图之前,因为我不希望任何人在未经身份验证的情况下访问它们。这样行吗 在delete_employee和update_employee视图
@login_required
def add_site(request):
data = {}
if request.method == 'POST':
if request.is_ajax():
form = AddSiteForm(request.user, request.POST)
if form.is_valid():
site = form.save(commit=False)
site.user = request.user
site.save()
data['status'] = 'success'
data['html'] = render_to_string('site.html', locals(), context_instance=RequestContext(request))
return HttpResponse(simplejson.dumps(data), mimetype='application/json')
else:
data['status'] = 'error'
data['errors'] = {}
for field, error in form.errors.iteritems():
data['errors']['id_'+field] = strip_tags(unicode(error))
return HttpResponse(simplejson.dumps(data), mimetype='application/json')
谢谢。好吧,我建议您不要只使用@login\u required,而是查看和关联的。这样,您可以根据用户或组微调访问限制。事后使用权限更改用户行为也比只使用登录所需的装饰器更容易、更安全。假设现在您只有管理员,但以后您想添加其他类型的用户,很容易错过登录所需的装饰程序,并授予这些用户访问管理员视图的权限。使用正确定义的权限不会出现此问题 接下来,is_ajax只检查HTTP_X_请求的带有头的_。这实际上与安全性无关,而是与用户友好行为有关。这样可以防止普通用户在浏览器中意外打开该页面并获取一些奇怪的数据。这对安全没有任何帮助,每个正派的黑客都可以设置一个额外的HTTP头:) 如果您不小心离开
DEBUG=True
,不处理异常可能会有潜在的危险,在这种情况下,django将提供代码片段和回溯,可能会泄露弱点。但是,如果此选项处于关闭状态,django将显示它自己的500错误页面。我的建议是:寻找所有预期的django异常(不是那么多),并确保正确捕获这些异常。此外,我想说,让另一个异常由django处理,django仍将提供生成回溯和其他调试信息的可能性,并将这些信息发送给管理员,而不是在现场显示它们。如果捕获到所有意外错误,则此行为将无法直接使用,可能会使您对失败的代码一无所知
最后,当您处理用户输入数据时,我建议您看看django书籍中的,它解释了最重要的威胁以及如何在django框架中处理它们