【发布时间】:2021-07-20 00:11:38
【问题描述】:
对联系人表单或使用 Django 的 send_mail 函数的表单使用 CSRF 豁免是否安全?
所以根据文档;
防御CSRF攻击的第一道防线是保证GET请求 (以及 RFC 7231#section-4.2.1 定义的其他“安全”方法)是 无副作用。
POST 请求,它只创建一封电子邮件,不接触数据库,被认为是一种“安全”的方法吗?
示例代码
from django.core.mail import BadHeaderError, send_mail
from django.http import HttpResponse, HttpResponseRedirect
def send_email(request):
subject = request.POST.get('subject', '')
message = request.POST.get('message', '')
from_email = request.POST.get('from_email', '')
if subject and message and from_email:
try:
send_mail(subject, message, from_email, ['admin@example.com'])
except BadHeaderError:
return HttpResponse('Invalid header found.')
return HttpResponseRedirect('/contact/thanks/')
else:
# In reality we'd use a form class
# to get proper validation errors.
return HttpResponse('Make sure all fields are entered and valid.')
*文档中的示例
我只是想知道在我添加 CSRF 豁免之前我是否没有遗漏一些东西。现在我听到你在想,为什么有人要禁用 CSRF 验证?
在欧盟,我们必须遵守 GDPR。通过设置cookie,我们需要明确要求用户接受cookie,如果我们可以阻止设置cookie,我们就不需要显示cookie提示;)
【问题讨论】:
-
老实说,我认为您误解了 GDPR:根据 GDPR 的思维方式,在数据库中存储个人数据(在这种情况下是发件人的电子邮件地址)比使用饼干。所以在我看来,无论如何你都必须请求许可。
-
我们是否保存用户的电子邮件地址?
标签: django cookies django-forms csrf django-csrf