Javascript软键盘设计

时间:2021-12-01 13:05:09

  国内大多数网站的密码在网络传输过程中都是明文的,我们目前正在做的产品也是这样的情形,这正常吗? 大家都偷懒?不重视安全?各人持有观点,有人认为明文传输并不是想象中的那么可怕,事实上正常情况下这些报文你根本监听不到,除非你种木马、入侵路由器、局域网监听等,所以在这种情况下互联网公司一般没必要花太大代价进行处理?其实不然一个好的产品,为用户考虑的产品,就是要把这些看似不起眼的事情做好。

  有个案例,听老大讲的。说的是xx公司搞两个同样功能的产品,其中一个产品做得很戳,但价格卖1000,先拿给用户使用;另一个产品设计各方面功能都对用户很体贴,价格只卖500元,这时用户一对比就会产生价值,肯定会去选择第二个产品,而且用着没得怨言,这样销量肯定会比第一个高。好了,不说废话了,先说本次讲的东西。

  网络监听大致分为三块:客户端、网络端、服务端,这个不难理解的;首先服务端的安全,这个在你购买网络服务的时候需要慎重选择,安全方面是否可信,网络管理员需要及时对服务器打补丁,阻止黑客利用漏洞进行服务器攻击,这方面的东西太多了,我也是大概了解,本文就不细说。

  网络传输过程数据的安全,举一个很简单的例子,如果我用笔记本在一个租房比较密集的小区,建立一个无密码的wifi热点,保证很多试图蹭网的人连接上来,然后如果我用WireShark(或者用WinPcap写一个过滤程序),监听WiFi收到转发的数据包,那一定能截获大批的用户名和口令,如果你登录网站的用户名和密码都是明文传输的,那就轻而易举的得到这些隐私性的数据了,这个例子也说明,各位千万不要贪图小便宜而去蹭别人的WiFi,这是一个对自己来说很危险的行为。实施网络窃听是如此的容易,甚至不需要额外安装什么黑客软件就可以进行。对于很多场合,我们对于传输的内容被窃取并不关心,我不怕别人知道我看了什么新闻,也不怕别人知道我在网站上回答了什么问题,但是用户名和口令这样的身份鉴别信息是绝对不可以被窃取的,因为可能会引起一系列其他的安全问题,大多数人的密码都会有相似情况或者干脆用一个密码吧?因为密码太多怕忘记。前段时间CSDN泄漏用户信息以后大家都在改密码就能说明问题,公司领导也提醒我们内部xx员工系统的密码是明文的,请大家慎重设置个人秘密。个人认为对于关键身份能有鉴别性的信息再传输时进行加密是一种非常有必要的,而且也是非常重要的事情。

  客户端攻击,攻击者利用木马程序监控用户的键盘,鼠标等操作信息,最后把数据传到盗号者指定的地方,盗号者利用收集的数据就会分析出敏感信息。木马一般都是有针对性的,比如针对指定的网站,特定的页面进行监听,常见的监听就是对键盘,cookie值,鼠标其次吧,当用户访问xx网站的登录界面时,需要输入账号和密码,这时木马就会将当前所在的网址和当前输入的一系列操作收集并发送到盗号者手中,是不是很简单?所以,为了避免这种情况软键盘就应运而生了,因为软键盘在输入内容时是通过鼠标去点击,不需要键盘操作,如果要想监听用户的鼠标操作,每次鼠标点击时对特定区域截屏,多次连续点击就需要连续截图,最后打包发送(这种方式的木马很容易被发现),另外木马程序不得不针对该特定网站而重新编写,没用通用性,当然盗号者如果觉得有这个必要的话,那就不说了,没得任何方法是安全的。最后说ocx控件,支付宝,各大网银的密码输入框框都是“安全控件”,安不安全那的黑客们说了算,这个本文不讨论了,本文是说软键盘,用javascript编写的软键盘。

  我发觉我写文好痛苦,忽悠了半天没有进入主题,越扯越远,终于开始写与软键盘相关的东西了,希望以后能够慢慢提高。。。

  上面都说了为何要做软键盘,一是防止客户端有木马,二是网络传输过程中不使用明文传输。效果图,如下:

  软键盘设计步骤:1、服务器端将数字、字母、特殊字符分成三部分,分别对这三部分字符串随机排序,并记录键盘布局,放session中。

          2、客户端根据服务器生成的键盘布局利用javascript动态生成软键盘及布局。

          3、用户鼠标点击软键盘内的按钮的时候文本框会有一个黑点,这个黑点其实是一个随机数,并非真实的密码内容。真实密码的坐标存放到一个列表中。

          4、客户端会涉及到坐标转换;字母<--->坐标相互转换。

          5、当光标离开密码框,将坐标列表转换为文本字符串赋值到文本框中。会出现一个现象就是,明明只输入了6位数字的密码,但小黑点的数量可能会有十多位,因为这不是明文的密码。

          6、用户提交表单的时候,提交到服务器的是密码对应的坐标数据。

          7、最后服务器利用session中的键盘布局,解析坐标为真实密码。

  注意:该方法还是有漏洞,还请读者自己猜怎么破解密码,其实很简单,javascript是客户端代码,算法都暴露的,网页是dom结构,人人都可以看的,呵呵,懂了吧。

  客户端javascript其实也支持rsa非对称加密算法,客户端根据公钥加密坐标数据,服务器端在利用私钥解密坐标,性能是个问题,个人觉得没必要搞这么多设计在里面了。

(未完)