这个问题更像是一种再保险,而不是直接关于如何编码的问题。作为一个自学者,我没有太多机会向专业人士询问此类问题,所以我在这里尝试。
我已经阅读了 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)任何有价值的链接可以进一步阅读这些危险?
也许其中一些问题听起来不太了解,但我正在努力克服这一点。如果有人可以帮助我,我会很高兴。