【问题标题】:Django - Are there security risks with not implementing is_valid and cleaned_data for forms in Django?Django - 没有为 Django 中的表单实现 is_valid 和 clean_data 是否存在安全风险?
【发布时间】:2020-06-22 02:30:49
【问题描述】:

我更喜欢实现 A 和 C 而不是 B 和 D,因为我想在 html css 文件中为表单实现自定义 css,而不必处理 forms.py 或在 python 中格式化 css . 与 B 和 D 相比,A 和 C 是否存在任何安全风险?使用 A 和 C 还有其他缺点吗?

#A
if request.method == "POST":
    user = authenticate(email=request.POST["email"], password=request.POST["password"])

#B
if request.method == "POST":
    if form.is_valid():
        email = form.cleaned_data['email']
        password = form.cleaned_data['password']
        user = authenticate(email=email, password=password)

#C
if request.method == "POST":
    contact_name = request.POST["contact"]

#D
if request.method == "POST":
    if form.is_valid():
        contact_name = form.cleaned_data['contact']

【问题讨论】:

  • 未经验证的未经处理的用户输入总是是一个安全问题,尤其是在网络上。而且您不必绕过表单验证来“实现您的自定义 css” - 该主题不乏资源。
  • 我可以在没有forms.py的情况下为A和C实现is_valid函数吗?我将表单直接输入到 html 模板中,而 A 和 C 中没有 forms.py。
  • 然后重做你的模板。表单验证并非易事,Django 表单确实有效,所以不要再尝试重新发明众所周知的方轮了。
  • 好的,我会这样做的。你能确认我应该总是有一个 forms.py 来在 Django 中正确实现表单吗?
  • 将表单放在哪里并不重要(即使约定是将它们放在 forms.py 模块中),重要的是(正确)使用表单进行用户输入。如果您关心安全性和可维护性,那就是......

标签: django django-forms django-views django-authentication


【解决方案1】:

AC 没有安全风险。 is_valid() 方法运行验证并返回指定数据是否有效的布尔值。 更多可以参考:
https://docs.djangoproject.com/en/3.0/ref/forms/api/#django.forms.Form.clean

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多