Django项目中form表单如何进行csrf校验
Admin 2022-06-16 群英技术资�
通常,钓鱼网站本质是本质搭建一个跟正常网站一模一样的页面,用户在该页面上完成转账功能
转账的请求确实是朝着正常网站的服务端提交,唯一不同的在于收款账户人不同�
如果想模拟一个钓鱼网站,就可是给用户书写一个form表单 对方账户的input框没有name属性,然后你自己悄悄提前写好了一个具有默认的并且是隐藏的具有name属性的input框�
如果想解决这个问题,当转账请求发送给服务端后,服务端会给各台机器返回一个随机实时字符串。下一次,如果还有请求向服务端发时,服务端会校验字符串,若对不上的话服务端就拒绝访问。这就是csrf校验�
那么form表单如何进行csrf校验呢?
你只需要在你的form表单内写一个{% csrf_token %}就可以了
示例�
urls.py
urlpatterns = [ url(r'^transfer/', views.transfer), ]
settings.py
STATIC_URL = '/static/' STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')]
第三种方式的js文件(官方文档套用就行�)
function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie !== '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) === (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } var csrftoken = getCookie('csrftoken'); function csrfSafeMethod(method) { // these HTTP methods do not require CSRF protection return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); }
views.py
def transfer(request): if request.method =='POST': username = request.POST.get('username') target_user = request.POST.get('target_user') money = request.POST.get('money') print('%s � %s 转账 %s�' %(username,target_user,money)) return render(request,'transfer.html')
前端页面 transfer.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script> <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="external nofollow" rel="stylesheet"> <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script> </head> <body> <form action="" method="post"> {% csrf_token %} <p>username:<input type="text" name="username"></p> <p>target_user:<input type="text" name="target_user"></p> <p>money:<input type="text" name="money"></p> <input type="submit"> </form> <button id="d1">发送ajax请求</button> {% load static %} <script src="{% static 'myfile.js' %}"></script> <script> $('#d1').click(function () { $.ajax({ url:'', type:'post', // 第一种方� 自己手动获取 {#data:{'username':'jason','csrfmiddlewaretoken':$('input[name="csrfmiddlewaretoken"]').val()},#} // 第二种方� 利用模板语法 {#data:{'username':'jason','csrfmiddlewaretoken':'{{ csrf_token }}'},#} // 第三� 通用方式 引入外部js文件 data:{'username':'hank'}, success:function (data) { alert(data) } }) }) </script> </body> </html>
装饰器模块导入:
from django.views.decorators.csrf import csrf_exempt,csrf_protect
当我们网站整体都校验csrf的时� 我想让某几个视图函数不校�
@csrf_exempt #给哪个视图函数加上,就不给哪个视图校验csrf
当我们网站整体都不校验csrf的时� 我想让某几个视图函数校验
@csrf_protect #给哪个视图函数加上,就给哪个视图校验csrf
注意:验证同时需要把'django.middleware.csrf.CsrfViewMiddleware'注销�
当我们网站整体都不校验csrf的时� 我想让某几个视图函数校验
from django.views import View from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt,csrf_protect # @method_decorator(csrf_protect,name='post') #第二种指名道姓地给某给方法装 class MyHome(View): @method_decorator(csrf_protect) #第三� 给类中所有的方法都装 def dispatch(self, request, *args, **kwargs): return super().dispatch(request,*args,**kwargs) def get(self,request): return HttpResponse('get') # @method_decorator(csrf_protect) #第一种方� def post(self,request): return HttpResponse('post')
注意:验证同时需要把'django.middleware.csrf.CsrfViewMiddleware'注销�
当我们网站整体都校验csrf的时� 我想让某几个视图函数不校�
总结:给CBV加装饰器 推荐使用模块method_decorator
csrf_exempt 只能给dispatch方法�
您可能感兴趣的文�:免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:[email protected]进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容�
猜你喜欢
下面我们就用python求取质数的和。质数就是在大于1的自然数之中,除�1和它本身之外,不会再有其他因数的自然数�
pytorch是一个python优先的深度学习框架,用于自然语言应用程序。这篇文章主要介绍pytorch中parameter与buffer参数如何使用的内容,对大家学习Pytorch具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章能有所收获,接下来小编带着大家一起了解看看�
这篇文章主要介绍了Python 制作子弹图,众所周知,Python 的应用是非常广泛的,今天我们就通过 matplotlib 库学习下如何制作精美的子弹图,需要的朋友可以参考一�
签到,都是规律性的操作,何尝不写一个程序加到Windows实现自动签到呢,本文就主要介绍了如何利用Python实现自动打卡签到的实践,具有一定的参考价值,感兴趣的可以了解一�
中国象棋是一种古老的棋类游戏,大约有两千年的历史。本文将介绍如何通过Python中的Pygame模块实现人机中国象棋游戏,感兴趣的可以学习一�
推荐内容
联系我们
24小时售后Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所� 茂名市群英网络有限公�
增值电信经营许可证 : B1.B2-20140078