WEB程序时,第一行代码都是怎么写出来的?

前言

当每个人都学会写程序时,第一行代码就是全部。但是当你开始学习WEB后台技术的时候,很多人的第一个功能就是写登录(悄悄话:别人不认识,反正我是)。

但是当我面试或与很多工作经验较短的同学交流时,我发现很多同学在简历上写着:,但他们只是简单地实现了功能逻辑,在安全方面并没有考虑太多。

这篇文章主要是跟大家聊一聊,在设计登录界面的时候,不仅是功能的实现,还有我们在安全方面需要考虑的问题。

安全风险

蛮力!

只要网站暴露在公网上,就很有可能被针对。试试这个简单有效的爆破方法:

通过各种方法得到网站的用户名后,编写程序遍历所有可能的密码,直到找到正确的密码

伪代码如下:

那么我们如何预防这种情况呢?

验证码

聪明的同学刚想到,我可以在密码错误一定次数时添加验证码验证!比如我们设置当用户密码错误3次时,需要用户输入图片验证码才能继续登录操作:

伪代码如下:

伪代码不考虑并发,实际开发可以考虑加锁。

这确实可以过滤掉一些非法的攻击ssl 中间人攻击 原理,但是以目前的OCR技术,普通的图片验证码真的很难有效防范机器人(我们为此吃了不少苦头)。

当然,我们也可以花钱购买类似于第三方公司提供的滑动验证的验证方案,但不是100%安全,可以破解(惨痛的教训)。

登录限制

这时候有同学说我可以直接限制异常用户的登录操作。当密码错误达到一定次数时,直接拒绝用户登录,一段时间后恢复。例如,当我们设置一个账户登录10次错误时,该账户的所有登录操作都会在5分钟内被拒绝。

伪代码如下:

嗯,这个确实可以解决用户密码被炸的问题。但是,这会带来另一个风险:攻击者虽然无法获取网站的用户信息,但可以阻止我们网站的所有用户登录!

攻击者只需要无限循环遍历所有用户名(即使没有,随机)登录,那么这些用户将永远被锁定,导致普通用户无法登录网站!

IP限制

由于无法直接定位用户名,我们可以处理IP地址。如果直接封锁攻击者的IP,一切都会好起来的。我们可以设置,当调用某个IP下的登录界面出错次数达到一定时间时,禁止该IP登录。

伪代码如下:

这也可以在一定程度上解决问题。事实上,很多限流操作都是在IP上进行的。比如nginx的限流模块可以限制一个IP在单位时间内的访问次数。

但是这里仍然存在问题:

例如,许多学校和公司现在使用相同的出口 IP。如果直接限制IP,可能会误杀其他普通用户。

现在有这么多的VPN,攻击者可以在IP被封锁后切换VPN进行攻击。

电话验证

难道没有更好的方法来预防吗?当然有。我们可以看到,近年来,几乎所有的应用都允许用户绑定手机。一是国家的实名制要求,二是手机和身份证基本一样,基本可以代表一个人的身份。所以很多安全操作都是基于手机验证的,登陆也是可以的。

当用户输入密码超过3次时,需要用户输入验证码(最好是幻灯片验证)

当用户输入密码超过10次时,弹出手机验证,要求用户使用手机验证码和密码双重认证登录

手机验证码防刷是另一个问题。我不会从这里开始。以后有时间我再讲讲我们做了什么。

伪代码如下:

我们结合了上述方法,增加了手机验证码的验证方式,基本可以防止相当多的恶意攻击者。但是没有一个系统是绝对安全的,我们只能尽可能地增加攻击者的成本。您可以根据自己网站的实际情况选择合适的策略。

中间人攻击?

什么是中间人攻击

中间人攻击(简称MITM),简单来说就是攻击者在A与B之间的通信过程中,通过嗅探、拦截等方式获取或修改A与B之间的通信内容。

举个栗子:送快递,途中要经过快递点Assl 中间人攻击 原理,躲在快递点A,或者干​​脆开个快递点B冒充快递点A,然后偷偷打开快递看看有什么在里面。您甚至可以将快递员留在身后,打包一个一角硬币盒并将其发送给您。

在登录过程中,攻击者如果嗅探到客户端向服务器发送的登录请求,就可以轻松获取用户的用户名和密码。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论