Django的安全格式扩展

django-careful-forms的Python项目详细描述


django careed forms是django’s Forms system上的一个小扩展。它 可以帮助您发现表单中潜在的安全隐患。

如果在窗体上定义的任何字段没有 已被访问(未被访问的字段也将没有 已在模板中呈现/显示给用户)。

示例

考虑以下示例:

# models.py:classSomeModel(models.Model):name=models.CharField(max_length=100)email=models.CharField(max_length=100)is_admin=models.BooleanField()classSomeForm(ModelForm):classMeta:model=SomeModel# template:{{form.name}}{{form.email}}

您可能已经注意到模型表单的Meta类未命中 excludeis_admin字段的定义(假设这是一个 将显示给最终用户)。

现在乍一看,这不会造成任何问题,因为只有模板 显示名称和电子邮件字段。但是忘记排除 is_admin域允许用户更改 应用程序(在这个假设的例子中获得管理权限)。

如果我们将此示例改为使用谨慎的表单,则缺少的字段将 触发一个警告(甚至是一个异常,具体取决于设置,请参见下文)。 提醒您注意该漏洞。

动机

这个包的最初动机来自最近rails框架中的well publicized ‘mass assignment’ vulnerability。具体情况不是 重要的是,基本问题是未经检查地将请求数据分配到 模型。

当然,django不易受这个特殊问题的影响,因为它 形成系统。但是,即使在使用表单系统时(特别是在使用 模型表单)仍然可能无意中允许请求数据 写入应该是私有的模型字段(例如,忘记 排除内部字段)。

然而,最后一个导火索是埃里克·罗米金在2012年欧洲djangocon大会上的精彩演讲,其中明确提到了表单陷阱。 在slide 53ff.

兼容性

  • Python2.6+
  • Django 1.3+

安装

简单的推荐方式:

#~ pip install django-careful-forms

用法

  1. "careful_forms.middleware.CarefulFormsMiddlware"添加到项目中 settings.MIDDLEWARE_CLASSES。你应该把它加在 列出以确保所有表格都被覆盖。
  2. 对于您希望由django监视的每个表单,都要仔细更改表单 表单的基类到careful_forms.forms.CarefulModelForm(或 CarefulForm对于常规表单)[1]
[1]In case you already have a custom form base class you can also add ^{tt8}$ to it.

示例:

classMyForm(CarefulForm):# ...classOtherForm(CarefulModelForm):# ...classYetMoreForms(CarefulFormMixin,CustomFormBaseClass):# ...

设置

小心开启

默认值:settings.DEBUG

此设置是django careed forms的“主开关”。当设置为^{tt10}时$ 已访问表单字段的记录处于活动状态,warnings将 为未访问字段触发。因为订书机 (small)每个挂起的请求在默认情况下仅在DEBUG模式下启用。

当设置为^{tt12}时,$不会引入预请求运行时开销。

小心异常开启警告

默认值:False

当设置为True时,将引发异常,而不是在 检测到访问字段。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Cassandra复制因子大于节点数   java J2EE JTA事务回滚不适用于OSE Glassfish 4.0(Build 89)   java spring安全预认证用户登录   org的java类文件。反应流。从RxJava编译示例时未找到Publisher?   java在使用dataFormat作为POJO通过Camel调用Web服务时无法设置SOAP标头   Javafx类的java静态实例   java如何防止一个部件在关闭时覆盖另一个部件的位置   sql server无法从我的java代码连接到数据库   java在JList(Swing)中显示带有的ArrayList   从Java中的CXF服务获取WSAddressing数据   使用资产文件夹进行java简单json解析(本地)   java LDAPException未绑定的无效凭据   JavaJSFspring部署到weblogic   JAVA中字符数组中的特定元素排列?   如果脚本位于不同的目录中,则ant不会使用exec标记运行Javashell脚本