这个问题更像是一个再保险问题,而不是直接关于如何编码的问题。作为一名自学者,我没有太多机会向专业人士询问此类问题,所以我在这里尝试。
我已阅读 django-docs 中的文档(https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/ https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/)以及该页面上的一些信息:http://cwe.mitre.org/top25/#CWE-352 http://cwe.mitre.org/top25/#CWE-352
据我所知,django 向用户传递一个令牌(某种 pin 码)。为了验证它确实是他,他必须在下次请求时返回它。 Google 的一些人发现这甚至可以通过 ajax 请求实现,这就是为什么我们从 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)有任何有价值的链接可以进一步阅读此类危险吗?
也许其中一些问题听起来不太灵通,但我正在努力克服这个问题。如果有人能帮助我,我会很高兴。