【发布时间】:2012-04-14 22:17:03
【问题描述】:
这个问题更像是一种再保险,而不是直接关于如何编码的问题。作为一个自学者,我没有太多机会向专业人士询问此类问题,所以我在这里尝试。
我已阅读 django-docs (https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/) 中的文档以及该页面上的一些信息:http://cwe.mitre.org/top25/#CWE-352
据我了解,django 向用户提供了一个令牌(某种密码)。为了验证它真的是他,他必须在下次他提出请求时归还它。 Google 的一些人发现这甚至可以通过 ajax-requests 实现,这就是为什么我们从 1.2.6 开始也制定了保护它们的新政策。 CSRF 是关于有人冒充别人给我一些东西(坏的、危险的代码、损坏的文件或类似的东西)。
如果我有这样的代码:
@csrf_exempt
def grab(request):
"""
view to download an item
POST because it stores that a user has downloaded this item
"""
item_id = request.POST.get('item', None)
if not loop: return HttpResponseBadRequest('no item id provided')
item = Item.objects.get(pk=int(item_id))
应该保存,因为在尝试将给定值转换为整数之前,我不会授予对数据库或应用程序任何部分的访问权限。如果我对某人下载文件做了错误的记录(在这种情况下几乎没有),也不会造成太大的损害。假设我会根据这种观点编写法案,那么 CSRF 豁免将是一个坏主意(对吗?)。
我也不明白为什么有人不能从用户那里窃取 CSRF 令牌并用它来欺骗我(或用户)。所以我对这个话题有一些疑问:
1) 我的假设是否正确?
2) 有人可以告诉我,一些不太好的人可以使用上面的视图进行什么(以及可能是如何)进行肮脏的把戏,他们会是什么?
3) CSRF 是中间人攻击的一个例子,它只是与之相关,还是完全不同?
4) 有任何有价值的链接可以进一步阅读此类危险吗?
也许其中一些问题听起来不太了解,但我正在努力克服这个问题。如果有人可以帮助我,我会很高兴。
【问题讨论】:
标签: django csrf django-csrf csrf-protection