网站被黑,黑客留言如下
“百度首页的dec,密匙都没变哦~呵呵少量的XSS,后台过程类页面都没加SESSION校验导致产生注入机会,并确实有注入
:)友情路过,并无恶意。”
想了好长时间还是没有参透话中的玄机,请大师指点迷津

解决方案 »

  1.   

    对了,我的网站是用asp.net 做的
      

  2.   

    后台页面load时没有用session判断是否登录?
      

  3.   

    添加了session判断,我写了一个checkuser控件,每个后台页面都添加了这个控件,checkuser的主要方法如下: protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["users"] == null||Session["role"]==null)
            {
                Response.Write("<script>alert('对不起您还没有登陆!');this.location.href='login.aspx'</script>");
            }
            else
            {
                id1 = Convert.ToString(Request.QueryString["id1"]);
                id2 = Convert.ToString(Request.QueryString["id2"]);
                rawurl = Request.RawUrl;
                if (Request.QueryString["page"] != null)
                {
                    rawurl = rawurl.Substring(0, rawurl.LastIndexOf('&'));
                }
                headurl = rawurl.Substring(rawurl.LastIndexOf('/') + 1, rawurl.LastIndexOf('&') - rawurl.LastIndexOf('/') - 1);
                username = Session["users"].ToString();
                usergrade = Session["role"].ToString();
                try{
                    bi = Convert.ToInt32(id1);
                    if (!StringClass.EncodeURLTail(headurl).Equals(id2))
                    {
                        Response.Write("<script>alert('URL攻击!您的IP已经被记录!');this.location.href='stopvisit.aspx'</script>");
                        return;
                    }
                }
                catch(Exception err)
                {
                    Response.Write("<script>alert('URL攻击!您的IP已经被记录!');this.location.href='stopvisit.aspx'</script>");
                    return;
                }
                try
                {
                    if(usergrade[bi]=='0')
                    {
                        //Response.Write("<script>alert('您不具有访问该页面的权限!');javascript:history.back(-1); </script>");
                        Response.Write("<script>this.location.href='stopvisit.aspx'</script>");
                        return;
                    }
                }
                catch(Exception err)
                {
                    Response.Write("<script>alert('"+bi.ToString()+err.Message+"');this.location.href='stopvisit.aspx'</script>");
                }
            }
        }
      

  4.   

    貌似你没搞清WEB页和WEB控件中的Page_Load的执行顺序 当前WEB页中的Page_Load的执行时间先于包含在其中的子控件的Page_Load执行 解决途径可以如下:
    1 重写(override)你的登录验证控件中OnInit方法 在OnInit中判断
    2 写一个WEB基类 在基类的Page_Load中判断 其他页面继承该基类
    3 HttpHandler/HttpModule中实现
    4 其他方法
      

  5.   

     protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["users"] == null||Session["role"]==null)
            {
                Response.Write("<script>alert('对不起您还没有登陆!');this.location.href='login.aspx'</script>");
            }
            
            Response.Write("注入代码");
         }你可以试试在红色部分加断点,看看会不会进入这个断点就知道了
    Session最好在Init中验证
      

  6.   

        protected void Page_Load(object sender, EventArgs e)
        {
      if (Session["users"] == null||Session["role"]==null)
      {
            Response.Redirect("login.aspx", true);
      }
            Response.Write("注入代码");
        }你可以同样在这个位置放断点,比较下。当然这也不是个好办法
      

  7.   

    红色部分是被执行了,但是 如果用户没有登陆的话他不是应该被定位到login.aspx页面吗?后面的页面即使执行了也无法显示出来啊?
      

  8.   

    我只不过举个例子说明你的跳转并没有停止客户端获取服务器端的信息而已
    而且你使用script进行的跳转,这是在客户端执行的,如果客户端禁用了相关的javascript或者不支持相关的javascript呢
      

  9.   


    你自己测试的时候是一次完整的load调用 它也加载了你那验证控件了 当然起了验证作用啦 但是如果客户端(比如‘黑客’)用修改过的表单远程提交呢 你限制了没有?如果没有 他可以修改本地表单跳过你的子控件(即验证过程) 这只是举个例子呵呵 
      

  10.   

    他已经说了哦,XSS漏洞