如何在asp.net mvc框架及django框架下面避免CSRF
CSRF 跨站伪造请求
不知CSRF为何物的,可以问下G哥。
在Asp.net MVC平台下,提供了Html.AntiForgeryToken() 方法,我们只需把其放在form的标签内,在浏览器端就会生成一个隐藏的<input />标签,然后在相应的action中添加如下特性:[ValidateAntiForgeryToke],这样从其它地方伪造过来的请求就会由框架自动帮我们进行处理,从而拒绝CSRF的攻击。
在Python的django框架中,也提供了相应的机制。我们需要在相应的template中放入{% csrf_token %}这样一个tag,注意的是需要放在<form>标签内,同时在相应的View方法中,需要使用 django.template.RequestContext 而不是 Context.
1 def your_view(request): 2 return render_to_response('template.html', 3 your_key_value, 4 context_instance=RequestContext(request) 5 )
其实,究其原理,都是在form标签内插入一个隐藏的<input>标签,然后在服务端接受数据时来查看对应的隐藏name是不是存在,如果不存在,就认为是一个伪造的http请求。
我们也可以通过 referer 判定来源页面:referer 是在 HTTP Request Head 里面的,也就是由请求的发送者决定的。
作者:
xwang
出处:
http://www.cnblogs.com/xwang/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。