从程序员的角度说信息安全的喜与忧

从pc端的官方网站,Wap网站,到Mobile网站,再到自适应个性化建站。从拿着VisualStudio6生硬的开发着适用于Windows2000的Windows Application,到迎来.Net,Mac的软件,再到现在移动Apps的风行。从键盘手机,到迎接Symbian的Nokia巅峰,WindowsPhone/Android/Ios三分天下,再到现在只剩下Android/IOS。

当现在微信公众号,小程序,各式Apps大行其道时,以一位一直从事开发编码的程序员的角度当然不仅仅是看到表面上的繁荣,更感到其背后隐藏的隐患重重。

一、“模板”真的安全吗?

N多年前当我们还需要一字一句写网站的时候,当我走过广州岗顶那些繁荣的电脑城门前,总会看到好几个年轻人举着牌子在高温煎熬或者寒风刺骨下站在户外,牌子上写着“200块一天建官网”。在那个Asp担纲当主角的年代就已经存在这样的“套改帮”——帮大家“套模板”,“改LOGO”,“调颜色”,“传资料”即可。

时至今日,其实早已经不仅仅pc端的网站用模板搭建,移动互联网自适应网站、AndoridApps,IosApps,微信公众号,微信小程序纷纷都可以用模板快速搭建起来。基本上可以保证不用懂得开发的基础和具备相应的能力都可以三五天解决问题。

这样的情况下,模板的安全自然就应该需要得到重视。虽然一些大型的商业模版都会有比较成熟健全的架构,但是当这些模板用户量越来越大的时候,同时也说明有越来越多的Object使用了相同的架构。安全性就会变得越重要。一旦其中一个用户出现了问题,那要同样的手法破解其他使用同样架构的Object恐怕就是以秒为单位的事情了。

二、Http和Https的纠结

相信很多人都听说过Http,但恐怕还有很多人都没听说过什么是Https!其实Https简单来说就是Http的安全版,就是在Http下加入Ssl层。Https的安全基础就是ssl。Http协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此Http协议不适合传输一些敏感信息,比如信用卡号、密码等。

为了数据传输的安全,Https在Http的基础上加入了ssl协议,ssl依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

但是目前在国内暂时来说还是比较难以全面推广或者说前面升级到Https,主要原因有以下几点:

1) Https需要到CA申请ssl证书,正规的ssl证书一般都是需要交费的。

2) Https和Http使用的是完全不同的连接方式,用的端口也不一样。Http一般是80,而Https一般是443。因为国内大部分中小企业或个人网站所用的都是虚拟主机,一般来说虚拟主机只是默认开放80端口而无法开放443端口的。

3) 通过Https传输数据会通过加密,而国内大部分的非网络科技类或技术型企业一般不会有相应的人才储备专门处理这些数据信息方面的管理和维护,成本开支方面也会变得不划算。

三、加密解密做法不科学

对于用户的重要私密信息理应是用最稳当最合理的加密方式进行处理和存储的。但是由于市面上开发者的思维模式和开发习惯各有不同,而且以前对这方面的重视程度不足,甚至乎曾经有大型的平台出现把用户的登录账号以明文方式存储在数据库中的情况。

而早期的使用Asp作为编码的站点,一般针对用户登录密码等其他比较私密的信息都是采用Base64等可逆的加密算法或者诸如MD5,SHA1等较为老旧的已经被验证可以通过技术手段解密的加密算法。而很多网站的开发者一直把这种思维模式流传到更多的作品上了。即便用的编码是Java, .Net, PHP, Perl, Python等高级编程语言,而处理方式都依旧沿用一些落后的模式和方法,这样就对以后的拓展造成很不利的影响。

继续发展后数据变得很重要,就更加难以改变当前的这种结构模式。所以很多Apps和微信公众号的运营,或许背后还是通过Asp这种早就被废弃,或者新的编程语言但是用一些比较落后的开发模式,依旧还是无法提供更好的保障。

在这里,提出一些我的做法的建议,如有不同意见请多指教:

1) 对于存储类似于用户密码,临时用的验证码,登录在线状态判断码等的内容,目前一般来说是尽量使用不可逆的加密方法进行加密。采用加密后的结果进行判断是否正确的数据和信息。例如对于php来说,存储密码之类的内容可以使用php特有的 password_hash(),而对于一些没有自己特色的加密函数的语言,可以使用多种加密函数组合型来增加被破解的难度。例如 sha1(md5().sha1()) 或者 sha1().md5().base64() 等。

2) 充分发挥AES, RSA等各自的优势。切合适用的环境使用合适的加密方法或者合作使用。

3) 可以在适当的情况下把一组数据分别分开存放,例如可以在某些情况下做加密解密的过程中增加需要盐值的机会,然后把正文和盐值分开地方存放,正文和盐值都分辨做一些特殊的加密。

4) 解密或者验证的时候增加一些必须的难以通过外部环境修改的条件,以防有心人从数据传输的中段监听或者窃取,破坏,恶意修改目标信息等。例如在解密隐私内容前,接收到请求后除了获取到需要的条件,还默认从设备上获取设备信息,获取设备的时钟状态等等。这样一方面可以有效防止恶意窃取信息或者监听等,二来同时可以提高数据的真实性。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180211G0N7CS00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券