程序员过关斩将--少年派登录安全的奇幻遐想

据说,这篇也是快餐,完全符合年轻人口味

说到登录,无人不知无人不晓。每一个有用户体系的相关系统都会有登录的入口,登录是为了确认操作人的正确性。说到登录安全,其实是一个很伟大的命题,不过常用的手段也不过尔尔。

避免明文

这个设计到用户凭证信息的表设计,切记避免明文存储用户的密码信息。还记得以前很多大厂的密码泄露事件吗?

在数据表的设计中,除了用户密码的摘要列之外,需要添加所谓的“salt”列,其实是随机生成的一个字符串,用于和用户密码的摘要联合生成最终的摘要。

loginNamesaltpwd
182xxxxxxxx随机字符串散列值
182xxxxxxxx随机字符串散列值

如果非要写一个过程的话:

  • 当用户首次注册的时候,系统随机生成salt,然后和密码按照规则拼接成一个字符串,然后求散列值,并存储在pwd列中

  • 客户端请求登陆接口,上传用户的账号和密码,这里的密码推荐md5的摘要(js也可以生成md5)

  • 服务端接收到请求,根据用户的账号查询对应的salt

  • 把上传的密码和salt根据规则拼接,然后生成摘要

  • 把上一步生成的摘要和数据库的pwd进行对比,相同则登录成功,不同则登录失败

为什么非要加入salt呢?有了salt不仅可以加大黑客破解的难度,而且同样密码的用户存储的pwd列也不相同,在用户信息安全性上又提高了一点。

验证码

验证码是一种比较廉价的但是很有效的防止别人乱搞的手段,它通过一种只有真人才能识别的防伪手段来阻止危险。

image

以上是12306的登录界面,看验证码的方式,是不是已经骚到了极点。如果你的登录接口不希望别人暴力破解的话,验证码是必须的。

对于普通的网站,验证码程序其实可以做的很简单就足够用了,就像以下

image

用到的技术是服务端把验证码的内容绘制在一张带有纹路的图片上,把码的内容存储在一个地方,并分配一个key,把这个key返回客户端,当客户端登录的时候携带者这个key和用户填入的验证码内容来确定验证码是否正确。

我曾经看过有人把验证码的校验放到客户端,要记住,客户端其实是无安全可言的,哪怕是那些做了混淆的App。

手机验证码

目前几乎所有的系统都支持手机验证码登录,为什么这么普及是有原因的。

  • 首先,这种方式便捷,用户无需记住密码,试想一下,用户要记住自己常用的几十个网站密码是很难的,而且手机现在几乎都不离身

  • 其次,手机验证码方式安全系数比较高,因为手机号现在都采用了实名制,手机号被盗的可能性比较小,而且现在的手机都有指纹锁,就算手机丢了也不怕

  • 最后,系统都采用手机号登录,可以高效的拉进和用户的距离,而且也有利于国家的监管工作,毕竟根据手机号就可以追踪到用户的所有信息了

设备号

登录的时候把当前设备的标识上传到服务端进行识别,我觉得对于登录来说很重要。为什么呢?

在现在App漫天飞的时代,在App上是要实现自动登录的,换句话说,用户登录过一次这个App,当用户下次打开的时候,需要实现自动登录,这在用户体验上会比每次都登录好很多。但是这就面临着一个问题:需要把用户登录的凭证保存在本地,切换到浏览器中,这些凭证信息可能会保存在Cookie中或者local storage中,当然凭证肯定是要加密的。我们要保证的是这些凭证就算是被黑客知道了,也不能正常登录。

那怎么才能保证呢?答案是设备。在用户的登录请求中一定要上传设备号(浏览器也可以用js生成的),服务端存储着用户的有效设备列表,当然这个有效设备需要产品经理给出明确的定义,比如最常见的:登录过5次的设备。当然说到设备还有一个主设备的概念,至于怎么样才能定义主设备,也是需要产品方给出定义的,像最常见的:手机端是主设备。像微信现在登录pc端是需要手机端扫码的,切换到业务,可以看做需要主设备确认的请求才能执行。

安全设备概念在多点登录的场景下非常有用,尤其是需要互踢的需求下。

登录时间

服务端一定要记住用户最后一次的登录时间,在很多情况下需要记住用户在某个设备上的最后登录时间。这样做不止是为了记录分析用户的登录行为,还可以分析长期未登录的用户,使他的登录凭据失效,强制他重新登录。

HTTPS

虽然一个证书每几个钱,但是https起到的作用在安全性上还是很大的。本质上它采用的也是加密算法,比http要耗费cpu,传输速度上要慢一些。但是它可以有效的防止中间人劫持,防止用户信息外漏,而且可以防止被钓鱼网站攻击,有效识别网站真实身份,像其他的有利于SEO,地址栏出现安全锁等就不说了。

写在最后

以上所说只是一些最常见的手段,除此之外,比如IP黑名单机制,限流机制等都可以加固登录的安全。

快不快?希望各位把登录安全在留言区做补充!!

程序员过关斩将--并发控制中的一个小提醒


程序员过关斩将--请不要误会redis 6.0 的多线程


程序员过关斩将--论系统设计的高可扩展性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gif android 点击 加载,android 加载显示gif图片的解决方案

使用方法:1-把GifView.jar加入你的项目。2-在xml中配置GifView的基本属性,GifView继承自View类,和Button、ImageView一样是一个UI控件。如:android:layout_height"wrap_content"android:layout_width"wrap_content…

C# 9 新特性 —— 增强的 foreach

C# 9 新特性 —— 增强的 foreachIntro在 C# 9 中增强了 foreach 的使用,使得一切对象都有 foreach 的可能我们来看一段代码,这里我们试图遍历一个 int 类型的值思考一下,我们可以怎么做使得上面的代码编译通过呢?迭代器模式迭代器…

android系统休眠发广播,Android - BroadcastReceiver

BroadcastReceiverBroadcastReceiver,广播接收者,用来接收系统和应用的广播,并做出相应的处理,如电量过低时提示用户充电等;BroadcastReceiver 是 Android 的四大组件之一,分为 普通广播、有序广播、粘性广…

开源·共享·创新|2020年中国.NET开发者大会圆满收官!

“疫情无限续费”的2020年,对于14亿中国人而言,是必须习惯口罩长在来脸上的一年;是各种线下聚会,被迫数次延期、滞后、云上举办的一年;……而对于潜心修行,静蓄能量的中国.NET开发者而言,2020绝…

android+百度lbs云,百度——LBS.云 v2.0——云存储扩展字段——Android

今天要解决两个问题:1云存储扩展字段2上传的数据是乱码3android版本上传数据到云端使用了一段时间LBS云功能之后,随着对系统的熟悉,默认提供的字段,肯定无法满足需要。比如增加注释,价格,档次等字段的时候。…

年终将至,回顾我们一起走过的 2020

又到了年终末尾匆匆忙忙的 2020 似乎按下了倍速键一晃眼我们就从夏天走到了冬天在这不平凡的一年中我们同途共进也笑着成长让我们跟随着六大年度词条重温这一年我们共同经历的值得骄傲的瞬间吧!点击文内高亮部分,阅读文章了解更多人才“倍”出星桥计划出…

android消息响应实验报告,android实验一实验报告-20210401011015.docx-原创力文档

Last revision on 21 December 2020Last revision on 21 December 2020Android实验一实验报告Android实验报告一姓名:丁军峰班级:信科12-3学号实验内容编写一个Android应用程序,实现对自己物品的管理,功能包括添加、删除和查询等实…

灵魂拷问:你和大佬,技术差距有多大?

今天咱们聊点技术以外的内容。前几天,有程序员在某个坛子上发帖吐槽,新来的应届生张嘴就是分布式,一堆框架,可代码根本不会写。马上有人跟贴说自己也遇到过这种情况,说之前自己遇到过一个应届生,开口闭口动…

android t跳转到fragment,Android 使用EventBus进行Fragment和Activity通信

本文介绍EventBus的基本使用,以及用于Fragment和Activity之间通信。github地址: https://github.com/greenrobot/EventBus 版本是 EventBus-2.4.0 releaseEventBus是基于订阅和发布的一种通信机制,使用流程如下:实例化EventBus对象注册订阅者…

达梦数据查询编码_查询数据库的编码方式

在Mysql中(1)查看Mysql数据库编码show variables like character_set_database 或者 show create database 数据库名称(2)查看Mysql中某张表的编码show create table 表名show create database 数据库名称、show create table 表名 ,还能够显示建库和建表语句。(3)…

玩转git-flow工作流-分支解析

概述搞开发的相信大部分人git天天都在用,那么一般我们在实际工程当中,遵循一个合理、清晰的Git使用流程,是非常重要的。否则,每个人都提交一堆杂乱无章的commit,项目很快就会变得难以协调和维护。那么是如何来规范整个…

android中的帧动画,[Android开发] Android中的帧动画

MainActivity文件:public class MainActivity extends Activity implements OnClickListener{AnimationDrawable anim_draw;SuppressLint("NewApi")Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);set…

ksu7对讲机调频软件_数字对讲机的群呼功能原理是什么?你了解多少?

大家都明白数字对讲机能够达到组呼、群呼、选呼的用途,但对数字对讲机的群呼功能原理可能操作方并不是太熟悉,下面我们就和大家来谈谈有关数字对讲机的群呼功能原理:无线对讲机群呼是为了更好地达到1个数字对讲机能够同一时间跟多个数字对讲机…

引入Jaeger——使用

上一篇定义了两种使用Jaeger的方式:中间件和action过滤器,下面这个例子定义了两个服务 WebAPI01,请求WebAPI02,采用的是中间件的请求方式。引入JaegerSharp包(或发布到自己的Nuget库里引用)WebAPI01的Start…

android studio初始化设置,Android studio 初始设置

1.compiler 勾选 Make project automatically(only works while not running/debugging) 自动编译2.设置File Encodings 中的编码 IED ENcoding,Project Encoding,Default encoding for properties files 改为UTF-83.Gradle 中 勾选 offline work 加快编译速度4.设置Tasks 中的…

抖音ai智能机器人挂机_电销秘诀 电销企业难以拒绝的AI智能电销机器人

眼下是快节奏的时代,超智能化的电销机器人已然成为了电销企业实现高速发展的首选方式。为何现代电销企业都会摒弃纯人工电销方式,采取机器人与人工协作方式呢?这就不得不说是因为AI外呼机器人的卓越性能和优势。一,提升工作效率AI…

如何在 ASP.NET Core 中使用 ActionFilter

ASP.NET Core MVC 中的 Filters 允许我们在 请求处理管道 中的某一个阶段的之前和之后执行自定义代码,不同类型的 filter 对应着 请求处理管道 的不同阶段,比如说:ActionFilter 可以在 Action 方法的之前或者之后执行自定义代码,这…

dataset的去重计数 g2_ExcelExcel去重、计数一步到位,这个方法简单到哭

私信回复关键词【插件】,获取Excel高手都在用的“插件合集插件使用小技巧”!最近在哼哧哼哧搬家,搬家第一天,面对空荡荡的房子,我发现了一个严峻的问题——日用品还没买。我打开了一个月前写下的日用品清单&#xff1a…

【源码解读】Vue与ASP.NET Core WebAPI的集成

在前面博文【Vue】Vue 与 ASP.NET Core WebAPI 的集成中,介绍了集成原理:在中间件管道中注册SPA终端中间件,整个注册过程中,终端中间件会调用node,执行npm start命令启动vue开发服务器,向中间件管道添加路由…

android开发环境 比较好,android 开发环境比较(Android开发环境比较).doc

android 开发环境比较(Android开发环境比较)android 开发环境比较(Android开发环境比较)Android build up various development environmentsThis article describes some of the things you need to know about the Android development environment configuration. The Andro…