如何在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 里面的,也就是由请求的发送者决定的。

 

posted @ 2014-02-24 14:11  洋芋,阿喜欢!  阅读(508)  评论(0编辑  收藏  举报