转载:http://zhidao.baidu.com/link?url=YECFLVZdXWln1WWlnq0dCD44nGOtlzME06VPwAzPydKaLVYQaduH24pYNdBT4-U-Sf2s0FRV3UVxcrPeYBz5kK&qq-pf-to=pcqq.c2c
问:
用户用 http://ip?username=xxx&password=xxxx,请求时,因为没有加密,所以用户名密码都是明文传输,很容易被窃取。 有什么办法,可以加密URL?(不用HTTPS)
答:
首先,很不推荐你使用get方式发送密码,最好是使用post. 原因是,你通过一个连接把用户名和密码发送到后台,即便密码不是明文,别人获取不到密码明文,但是,只要你这个连接成功登陆过,别人就可以拿这个连接到处登陆.密码明文加密完全形同虚设. 如果非想使用get方式发送,我可以给你个思路,就是表单附带发送令牌,这个令牌是表单内的隐藏域,后台里对每一个时刻都不同的字符串做单向加密然后保存SESSION会话,一般使用md5方式,然后表单页面隐藏域写出该SESSION的值.发送表单的时候,附带令牌一起发送,(在url形式中就是多了一个参数),后台验证令牌是否是保存过的SESSION值,如果是,执行登陆,如果不是,就报错. 不管令牌是不是正确的,你都需要在每次生成页面时重新更新一次令牌并输出,这样才能保证唯一性. 然后你可以使用js版的md5把密码处理成加密字符串. 这样可以躲过部分不熟悉html的,但是如果他懂html,只需查看html的令牌,然后自己去组成url,那么照样还是不行. 所以,这种形式仍是不可取的,正宗的方式就是post发送用户名和密码,或是ajax的get方式发送.总结:
1.要加密
a.自定义加密方法,解密方法,在页面请求时处理。
b.id可使用guid控制
c.临时身份令牌,控制安全性,需cache服务或者程序控制失效
2.不加密,尽量使用post方式传参