这个问题比直接关于如何编码的问题更重要。作为一个autodidact我没有太多的可能性问专业人士这样的事情,所以我在这里尝试。在什么情况下可以免于CSRF的危险?
我已阅读在Django的文档文件(https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/),并在该网页上的一些信息:http://cwe.mitre.org/top25/#CWE-352
至于我也明白了,Django的提供了一个令牌(某种PIN码)到用户。为了验证它确实是他,他必须在他下一次请求时返回它。谷歌的一些人发现,这甚至可能发生在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)任何有价值的链接进一步阅读这些危险?
也许这些问题中的一些听起来没有太明智的信息,但我试图克服。如果有人能帮助我,我会很高兴。
隧道尽头出现一道昏暗的光......所以如果我想把邪恶的东西传送给服务器,我首先必须向某些用户浏览器发送一些数据。在这个数据中,我隐藏了一些自动发送表单发送到服务器进行攻击。我假设用户登录到该服务器,因为他有一个帐户。如果服务器不检查某个标记,它只需要相信该请求是合法的。至少我现在有一个想法,它是如何工作的,以及在哪里画MIM和XSS。感谢那。 – marue 2012-03-31 17:38:22
@marue CSRF不是将恶意数据发送到服务器。这主要是因为攻击网站可以代表受害者发送合法和真实的请求。窃听,MITM和XSS只是获取缓解CSRF令牌的手段(尽管由于大多数身份验证管理方案使用基于cookie的会话,所以您可以改为使用会话ID)。 – Gumbo 2012-03-31 20:32:51
因此CSRF是假装成为你不是的人的所有和“唯一”的?凡只意味着不重要,但其他一切都是不同的攻击媒介。 – marue 2012-03-31 23:37:17