删除没有Django Form的数据

时间:2014-12-10 04:57:26

标签: django

我想知道在数据库中删除某些内容的最佳做法。

当用户想要删除我的数据库中的故障单时,他会点击POST到该URL的链接:

username/tickets/{ticket_id}

POST不再包含会话信息和CSRF令牌。就目前而言,实际删除的故障单的ID是从URL中捕获的。这个可以吗?使用表单在Django中处理POST是很典型的。我是否应该制作一个表格来删除票证,然后在POST机构中包含ticket_id,即使几乎不需要输入卫生设施?我现在正在做的事情被认为是黑客攻击吗?

谢谢 尼克

1 个答案:

答案 0 :(得分:1)

HYour问题尤其超出了Django,我猜这只是网上最佳实践和安全问题(无论使用何种框架或语言)。

考虑到你考虑下面的写作,你所做的事情基本上是正确的(并且理智!)。

首先,处理从客户端到服务器端应用程序的数据:

  • 会话保护:通过会话令牌保护这些POST可到达的网址(用户是否已登录?您的应用是否知道这些网址?)
  • CSRF保护:利用CSRF令牌防止跨站点脚本攻击
  • 所有权检查:用户拥有的故障单是否会将其删除?
  • HTTP方法检查:仅将这些网址的受众群体限制为POST(无GETPATCH,...)。

然后,关于输入卫生。这可以在至少两个层面上处理:

  • 类型检查:在脆弱的情况下,您的View代码应该检查(或尝试转换)进入的是什么类型的数据(整数,字符串......)并查看这是否是预期的
  • SQL参数绑定:查询数据库的代码应使用参数绑定构造查询,因此不会发生SQL注入(假设您使用的是SQL数据库)

如果您已完成所有设置,我认为您有一个坚实的基础