django的防止csrf攻击
跨站伪造请求, Cross-site request forgery,利用用户在不知情的情况下实现伪造表单提交给服务端中进行攻击的手段。
csrf的攻击原理
django中提供了一个Csrfmiddleware的中间件给开发者用于防止网站用户遭到这种攻击收发.
中间件主要是每次客户端通过post,patch,put等方式提交数据操作时,判断当前表单是否是隐藏了一个csrf_token的随机字符串令牌.如果有这个随机字符串,则中间件则会判断这个随机字符串是否是由服务端提供的.
我们开发者只需要在每个表单页面中, 内置一个隐藏的输入框里面填写cstf_token则可以让当前页面的表单顺利提交数据到后台.
csrf_token的生成是每次都是基于服务端的秘钥进行随机生成的,所以有一定的生成算法在里面的,所以如果没有秘钥的情况下, 则生成的随机token令牌则会轻易被django识别到.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method="post"> {# <input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">#} {% csrf_token %} 账号: <input type="text" name="username"> <br><br> 密码: <input type="text" name="password"> <br><br> <input type="submit" value="注册"> </form> </body> </html>
上面我们可以使用2种方式来完成csrf_token的提交,但是2种使用方式在某些场合下有所区别.
将来我们使用ajax以json的方式提交数据,则不能使用{% csrf_token %}
,只能使用`{{ csrf_token }}在json数据里面了。