前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >bootstrap+django搭建防跨站点攻击登陆系统

bootstrap+django搭建防跨站点攻击登陆系统

作者头像
戈贝尔光和热
发布2018-12-27 14:44:35
1.2K0
发布2018-12-27 14:44:35
举报
文章被收录于专栏:HUBU生信

环境:win10+mysql8.0+django2.0+bootstrap3.7

源码已经上传至我的github,欢迎修改使用:django2.0登录系统

最终显示结果:

设计的主要逻辑从以下几个方面来考虑:

1.登录:分为get与post两种情况,post即为提交请求,此时进行数据验证,使用django自带的抽象authentication类,使用login和logout类进行登入与登出。

2.注册:填写信息,与models层相结合,将数据存入数据库。

3.进行页面跳转。

具体内容如下:

总目录如图,其中app--mysite的文件内容为:

这两个目录应该不需要解释,django的基本操作。不太清楚的话,可以看我专栏的其他文章。

编写model层(models.py)

这里需要说明以下,我编写model层,并不是直接继承的model.Model,而是继承的django自带的登录系统中的AbstractUse类,这是django为了方便做登陆系统,而高度抽象出来的一个基类,查看源码可以发现,其中已经包括了username,password,email等字段,所以你只需要再编写你所需要的字段即可。当然你也可以重写基类,根据python继承的原则,子类与父类相同的属性,父类会被子类给覆盖。

从图中可以看见,我在User类中,定义了一个子类class Meta,它的作用从名称中就可看出来,是详细的名称verbosename是具体名称,下面一个是复数,至于他们的作用,就是在admin后台管理系统中能够显示verbose的内容,比如当我输入的verbosename为666时,在admin.py中注册之后的站点表名(model类名)为666,而self.name,则是点击进入之后,你所想要显示的提示,比如我是self.name的话,那么他会显示为我每天记录的name字段。

继续点击进入即可看见,每个记录的详细内容:

编写forms.py表单层:

注意,表单层使用widget来添加表单属性,继承django.forms类,即可使用。

比如,如果你需要输入的是密码,那么,只需要在widget中加入forms.PassInput(attrs=({"class":""},{"id":""}))。

编写视图层(views.py)

视图函数这里,有几点需要注意,一是,我使用的是django的通用类视图,也就是继承了dajngo.views.generic中的View,generic中还有许多其他的类,它们都是基于View的。

编写url.py

什么叫跨站点攻击呢? 简单来说,就是跨站点请求伪造,当你登录一个网站时,会在你的浏览器上保存一个cookie,如果此时,你正好又去点击了一个不良网站,后台人员,便可以使用保存在你浏览器上的cooike以你的身份去做一些事情。

那么dajngo如何来防止这种,情况呢?

dajngo使用伪随机数来完成这个操作,使用起来很简单,只需要在表单只能加入{{csrf_token}},如

这时当我们在登录的时候,如下图,便会出现一串伪随机数。可以杜绝99%的csrf。

今天就说这么多啦~

全文结束,欢迎在评论区讨论~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/09/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档