不可饶恕错误之明文传送漏洞
技术与开发
编者语:金融危机的到来让许多程序员也受到影响,在这样的大环境下,程序员还有好的机遇吗?有!而且是非常大的机遇!当前移动平台的程序开发如火如荼,特别是在苹果、Google等推出了平台开发工具后,进入这一领域的程序员越来越多,有的是想赚一些外快,有的是想在移动平台上功成名就,成为马化腾第二。
机遇就在眼前,你整装待发了吗?在此之前,还有什么需要注意的?小编跟以前进入此领域的程序员们交流时,他们首先给出的是忠告,编程时要避免犯一些不必要的错误,留下安全漏洞,造成功亏一篑。那又有哪些错误是我们需要避免的呢?看了不可饶恕编程错误系列,你就可以正式“出征”了!
数动连线程序员唐忠超:手机的网络应用越来越多,例如使用手机钱包看电影,在自动售货机上购买饮料,在手机中炒股,使用手机银行等。针对网络应用的手机程序以后也会越来越多,如果这些程序中存在安全漏洞,就会给用户带来极大的损失。
例如明文传送漏洞,明文传送敏感信息,它将会泄露用户手机中的各种机密信息,导致手机中的话费余额等重要财产遭到损失。所以,此类错误在手机编程中出现的话,就是不可饶恕的。
敏感信息不能明文传送
什么是明文传送敏感信息呢?顾名思义,就是客户端或服务器端的敏感信息不通过任何加密而直接传送到服务器端或客户端。
互联网是由各种复杂的网络组成的,当我们将信息从网络的一端传送到另一端的时候,通常会经过大量的网络设备。假如在传输过程中,有人截取了我们本来要传送到服务器的信息,而这些信息并没有经过任何加密,那么我们的信息将会被截取信息的人一览无余。这些信息可能是我们的邮箱登录账号、网站用户账号,也可能是银行账号、商业机密等。
在未来的手机应用中,与互联网通信是家常便饭,如果手机的某些程序存在明文传送敏感信息的漏洞,就可能威胁到手机中的财产安全,导致手机余额无故消失或者被盗(目前已经有能盗取手机余额的病毒)。所以,我们在手机编程过程中,一定要对敏感信息进行加密传送。
明文传送漏洞代码分析
明文传送敏感信息,用检测程序是发现不了的,所以是程序员最容易犯的错误。下面我们来看一个典型的明文传送敏感信息的错误代码。
<form method="post" name="login" action="logging.php">
用户名:<input type="text" id="username" name="username" size="25" />
密 码:<input type=" password " id="password" name=" password " size="25" />
<button class="submit" type="submit" name="loginsubmit" value="true"> 登 录 </button>
</form>
大家也许觉得,这只是很普通的生成登录框的HTML代码,并不存在错误。但是这段代码的作用是直接提交用户输入的用户名和密码到服务器上进行验证,这样明文在网络上传送,如果被别有用心的人截获,那么无疑是泄露了用户的机密信息。
那么我们如何来避免这种问题的发生呢?我们可以将这些敏感信息进行加密,然后再将加密过的信息传送到目的地,这样就算中途被别有用心的人截取,他也只能看到加密后的乱码。当然,关于加密的算法非常多,如使用MD5、SHA1、BASE64等,我们可以视具体情况选择合适的加密算法,这里采用MD5加密密码传送,正确代码如下:
//文件md5.js下载地址http://www.shudoo.com/bzsoft
<script type="text/javascript" src="md5.js"></script>
<script type="text/javascript">
Function jiami(){
Var pw= Document.form1.password.value;//取得用户输入的密码
Document.form1.password.value=hex_md5(pw);//使用MD5算法加密密码
}
</script>
<form method="post" name="login" action="logging.php" onsubmit="jiami();">
用户名:<input type="text" id="username" name="username" size="25" />
密 码:<input type=" password " id="password" name=" password " size="25" />
<button class="submit" type="submit" name="loginsubmit" value="true"> 登 录 </button>
</form>
当然,大家也可以将用户名进行加密传送,这里大家需要注意的是,MD5加密算法是不可逆的算法,加密后不能得到原文,如需要得到原文,我们可以采用可逆的加密算法。
小编支招
如何解决明文传送敏感信息带来的隐患呢?必须对敏感信息进行可靠的加密,而采用JavaScript在客户端进行加密后传送是较好的方法,但由于JavaScript在客户端是可以获取的,如果被人获取并破解了加密算法,那么我们此前所作的努力就付诸东流了。
所以,我们在使用JavaScript进行客户端加密的时候,尽可能地采用不可逆算法加密,而非常重要的信息(如网上银行系统的登录账号等),我们可以采用ActiveX控件来进行加密。
除了选择加密方式外,选择加密算法也是非常重要的,如果只是一个密码需要加密传输,我们可以采用MD5加密算法,不用知道明文即可判断是否有效。它不仅可以快速加密较长的信息,而且还能将密文还原为原文,其他加密算法如:IDEA、RC2、RC4等大家视情况采用,当然大家也可以自己设计加密算法,但是需要注意的是,我们使用的加密算法一定要是有效的、没有被破解的加密方法。