小弟碰到一个问题,使用如下方式,定义一个JSON变量,表示用户名密码,然后使用EXT库向服务器发送请求,然后delete该变量,并CollectGarbage回收,但是通过一些工具,比如winHex,在IE浏览器的内存中搜索密码关键字bbb,有时候可以搜索到{'password': "aaa",'user': "bbb"}内存片段,有泄密风险,请教各位大侠,如何清理param变量,只要在IE内存中搜索不到就可以了。var param = {'password': "aaa",'user': "bbb"};
//调用EXT库POST请求
Ext.Ajax.request({
    url : "xxxxxxx",
    method : 'post',
    jsonData : param,                
    success :onSuccess,
    fail : this.onRequestFail,
    scope : this
});
delete param;
CollectGarbage();
JS变量清理

解决方案 »

  1.   

    别的对象有引用到param?删除前先清空值 param.password = "";
      

  2.   

    你这个主要的问题是密码是明码形式
    客户端从来都不安全,真的注重安全的话密码要加密,最好使用flash密码框,这样页面代码对其无可奈何,密码也可以很好地加密
      

  3.   

    首先,我们要考虑一下场景。
    这个password是客户端发送的。
    那是谁输入的呢?客户输入的。
    那客户需要用这么复杂的方式去查自己的密码么?
    首先如果在家的话,除非被别人控制,不然不需要。但是如果都被别人控制了,别人不会用木马去偷你所有的密码?何必偷你在ie输入的密码。
    如果在网吧,现在的客户端都会下机后自动重启。经过以上分析,楼主你真的考虑安全性走火入魔了。
      

  4.   

    To clark523:
       不是我走火入魔了,是公司安全检测,发现这个问题,那些人走火入魔了,我也比较无语了。
      

  5.   

    param.password = ""; param.user = "";
    delete param.password;
    delete param.user;
    delete param;
    CollectGarbage();---- 这样,还是不行
      

  6.   

    牛角尖钻得太严重了,你该换个思路了
    既然觉得对象怎么都无法释放,那不生成这个变量也就行了,
    你完全可以不用ajax,用表单提交方式
    看样子你那些同事要么狗屁不懂,要么就是找茬的,你直接一个js变量都不用,没人有话说了吧?
    还有对象传递进了Ext的ajax函数后,函数内肯定有一些动作,而你根本没法干涉,可能函数内部有闭包在保护这个对象,甚至copy了一份,所以你怎么释放外面的变量都是没有用的,所以你最好不用这个ajax函数,才没有这个问题