公司老板让我把软件登录给做了,这事可难倒我了,我笑着跟老板说:“老板,咱的软件做登录基本上就属于脱裤子放屁,多此一举!”,老板看我说话那么有味道,于是脸色一变,问我咋回事。我知道我一个人说服不了老板,于是叫来另外两个研发,一起琢磨怎么跟老板说这个事情。

打开网易新闻 查看精彩图片

有人可能认为不就是一个登录嘛,有啥好纠结的呢?其实不然。

我们公司目前正在研发的软件是基于第三方平台接口开发的,在第三方平台基础之上,又增加了自己的逻辑。

公司现在有三个研发,我到这家公司的时候,这个软件已经开发了有半年左右了,我入职第一天看了一上午的代码,愁得都直摇头,要不是现在工作难找,要我在这种质量的代码下继续开发,我还不如辞职呢!

怎么回事呢?因为,这个软件除了数据库不是本机的,整个软件最多只能算个单机软件,除了需要连接远程数据库,其他的都能功能都在本地跑。

说白了,这个软件没有服务端!

虽然没有服务端不影响做登录,但作为程序员总感觉哪里怪怪的。

当然,如果纯粹为了应付工作,我直接写个注册界面,然后把账号密码存到数据库,密码用MD5混淆一下,软件在我们公司内部用没有任何问题。

关键是,老板做登录,其实是准备做权限的,未来准备作为商业软件推广并且收费,还是按照功能收费的那种。

我一听完老板的想法,头都大了!立马就想到了一个词,那就是“脱裤子放屁”,并且忍不住就脱口而出了!

老板也没料到我会讲这话,有点生气得问我:“做个登录很难吗?”

我摇摇头说不难,我跟老板解释了一下前因后果,告诉他,我们的软件现有的框架做登录,其实一点用都没有,稍微懂点技术的人要么反编译要么直接抓包、封包,我们的登录就成摆设了!

老板还是不懂,于是我才想到了把另外两个程序员也拉到老板办公室说这个事情。

说了半天,老板才搞清楚事情的前因后果,也直摇头,然后感叹道:“前面的人写的是什么玩意啊!”,然后就问我们,现在还能不能弥补。

我告诉老板,这个软件已经开发了半年多了,现在改框架,估计要重新跑起来,最少得两个月!

然后老板就让我们出去了,自己在那边黯然神伤。

看到这里,估计很多人不知道我为什么觉得写这个登录是“脱裤子放屁”,这里我就解释下吧。

首先,这个软件是纯单机,数据库虽然是分离的,但是也仅仅只是数据分离了而已,其他的,基本上通过抓包和反编译绕过我们软件的登录也是没问题的,甚至于数据库的连接串都是暴露在前端的。如果没有做数据库访问IP白名单,一些懂反编译的人通过反编译源码就可以知道我们软件的数据库访问地址以及账号密码!

搞笑的是,这个软件最初的编写者还在数据库的配置界面对数据库连接串做了加密,用的时候再进行解密。之所以搞笑,那就是加密和解密的过程只要会反编译,就能看到!

这和我觉得登录是“脱裤子放屁”是一个道理,账号在注册的时候我是可以对密码进行混淆,然后存入数据库,登录的时候我再次对输入的密码进行混淆,然后跟数据库里面的密码进行比对,但是,这样有什么用呢?

软件可以在登录时设定错误次数的上限,那也只是软件入口的登录设了错误上限而已,有心之人完全可以绕过软件,直接对数据库进行访问,然后通过碰撞的方式测出真正的密码!

现在这种情况,硬要做登录,那就只能“掩耳盗铃”,即先写个注册界面,账号注册后将密码进行混淆,然后存到数据库里,登录的时候先混淆用户输入的密码,再去用混淆后的密码比对数据库存入的密码。

这样做虽然有点傻,但好歹可以应付一些不会编程技术用户,但我觉得,这事迟早得被人发现吧!

但即使登录做好了,后续也会引来一系列问题,比如说功能鉴权,权限数据肯定也是存在数据库里的,前端也就是整个软件用户在使用某个功能时,先拿数据库里面存入的权限信息进行比对,然后再决定用户有没有这个功能的权限。

同样的,只要用户会反编译,想要绕过这部分权限直接使用功能是完全可以的,甚至可以通过封包的方式直接给软件假的权限数据,软件也发现不了啊!

越想越头疼,最后我还是决定先缓缓,几个研发先沟通沟通再说。

结语

其实,我们公司软件之所以遇到现在的困境(至少我认为是困境),就是因为前后端不分导致的,整个软件所有逻辑都写在一起,哪有隐私可言,甚至想要做鉴权都很难做。

如果软件是前后端分离的,那么首先数据库连接肯定不会暴露在用户端的,这样做一些防护措施,数据不会有暴露风险,比如说在后端登录接口做访问错误的限制,前端很难破得了,至少没有一定的水平是破不了的。

然后就是功能鉴权这块,所有业务逻辑写在后端,在调用业务逻辑时,后端先检查下用户的功能权限,没有权限直接返回错误。

至少,大部分公司都是这么做的吧!当然,还有很多高级做法,这里就不一一列举了!但是,像我们公司这样,我真是拿不出更好更安全的方法了!

现在我准备劝老板这个软件我们先内部用,等全部功能开发好以后,再开发个商业版本,别无他法!