asp.net 网站后台连接地址只通过链接有效,直接输入无效

时间:2022-05-11 00:50:03
这个应该有人实现了吧。 实现的大哥能不能给个代码什么的。最好有这么个插件吧。谢谢了。
也可以在此讨论讨论的。。

13 个解决方案

#1


来人啊、、、

#2


1.Request.UrlReferrer 是否是前一个页面的地址.
  但这个可以用程序做假.

2.链接中加参数,密文之类的,这个手工输入比较困难

#3


你直接从你的连接中复制 放到URL里面看能不能实现

#4


引用 2 楼 cpp2017 的回复:
1.Request.UrlReferrer 是否是前一个页面的地址.
  但这个可以用程序做假.

2.链接中加参数,密文之类的,这个手工输入比较困难

第一个懂。
第二个呢~?我先去网上找找、学习学习

#5


引用 3 楼 yanglei6979431 的回复:
你直接从你的连接中复制 放到URL里面看能不能实现

啊。。我的意思是指链接过去可以。但是直接在地址栏中输入(除了后台的登录页面)地址,就会跳转到登陆页面(类似就这意思)。而且最好不是在Page_load中判断权限的那种。

#6


怎么是直接输入无效?

#7


方法一:
你可以仿照asp里的做法。步骤:
1.新建admin.asp文件。输入如下内容:

<%

dim ComeUrl,cUrl,AdminName

ComeUrl=lcase(trim(request.ServerVariables("HTTP_REFERER")))
if ComeUrl="" then
response.write "<br><p align=center><font color='red'>对不起,为了系统安全,不允许直接输入地址访问本系统的后台管理页面。</font></p>"
response.end
else
cUrl=trim("http://" & Request.ServerVariables("SERVER_NAME"))
if mid(ComeUrl,len(cUrl)+1,1)=":" then
cUrl=cUrl & ":" & Request.ServerVariables("SERVER_PORT")
end if
cUrl=lcase(cUrl & request.ServerVariables("SCRIPT_NAME"))
if lcase(left(ComeUrl,instrrev(ComeUrl,"/")))<>lcase(left(cUrl,instrrev(cUrl,"/"))) then
response.write "<br><p align=center><font color='red'>对不起,为了系统安全,不允许从外部链接地址访问本系统的后台管理页面。</font></p>"
response.end
end if
end if

AdminName=replace(session("AdminName"),"'","")
if AdminName="" then
call CloseConn()
response.redirect "login.asp"
response.End()
end if
sql="select UserName from Admin where UserName='" & session("AdminName") & "' and Password='" & session("AdminPassword") & "'"
set rs=conn.execute(sql)
if rs.eof and rs.bof then
  rs.close
  response.Redirect("login.asp")
  response.End()
end if
%>


你应该可以看明白上面的代码。
2.在每个aspx页面的头部写入:
<!--#include file="admin.asp"-->
注意路径哦。

方法二:在asp.net中还有其它方法。可以通过在global.asax.cs中的Application_BeginRequest事件中判断。

方法三:在每个页面的onload事件里判断。

方法四:通过继承父类的方法判断。

以上最后三个方法在网上很容易找到例子,我就不帮你搜了。
方法一虽然是asp中的方法,但是个人认为还是很不错的,asp.net里一样可以使用。

#8


config里面好像可以修改。

#9


直接有个类文件就可以实现,不用session之类的
	<system.web>
<httpModules>
<add name="ValidateModule" type="ValidateModule"/>
</httpModules>
</system.web>

上是webconfig配置
还有,类代码:
/// <summary>
/// Summary description for ValidateModule
/// </summary>
public class ValidateModule : IHttpModule
{
    
    public void Dispose()
    { 
    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="context"></param>
    public void Init(HttpApplication context)
    {
        context.AcquireRequestState += new EventHandler(context_AcquireRequestState);
    }
    /// <summary>
    /// Page permit validate
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    void context_AcquireRequestState(object sender, EventArgs e)
    {
        try
        {
            HttpApplication application = (HttpApplication)sender;
            string requestUrl = application.Request.Url.ToString().ToLower ();
            string requestPage = requestUrl.Substring(requestUrl.LastIndexOf('/') + 1).ToLower();
            //LogWriter.Verbose("ValidateModule.context_AcquireRequestState", "request page: " + requestPage);
            if (requestPage.Contains(".aspx"))
            {
                //LogWriter.Verbose("ValidateModule.context_AcquireRequestState", "1======");
                if (!requestPage.Contains("loginform.aspx") && !requestPage.Contains("findpassword.aspx"))
                {
                    //LogWriter.Verbose("ValidateModule.context_AcquireRequestState", "2======");
                    if (application.Session["UserID"] == null)
                    {
                        //LogWriter.Verbose("ValidateModule.context_AcquireRequestState", "3======");
                        application.Response.Redirect("~/LoginForm.aspx", false);
                    }
                }
            }
        }
        catch (Exception ex)
        {
            
        }

    }
}

够详细了....试试看

#10


所有页面基础BasePage,在BasePage判断是否登录或IIhttpMoudle判断
其他设置参数,实现加密再解密

#11


谢谢楼上的大哥们。我先去试试。好多好东西。 待会结贴给分哈。

#12


JF

#13


urlrewriter

#1


来人啊、、、

#2


1.Request.UrlReferrer 是否是前一个页面的地址.
  但这个可以用程序做假.

2.链接中加参数,密文之类的,这个手工输入比较困难

#3


你直接从你的连接中复制 放到URL里面看能不能实现

#4


引用 2 楼 cpp2017 的回复:
1.Request.UrlReferrer 是否是前一个页面的地址.
  但这个可以用程序做假.

2.链接中加参数,密文之类的,这个手工输入比较困难

第一个懂。
第二个呢~?我先去网上找找、学习学习

#5


引用 3 楼 yanglei6979431 的回复:
你直接从你的连接中复制 放到URL里面看能不能实现

啊。。我的意思是指链接过去可以。但是直接在地址栏中输入(除了后台的登录页面)地址,就会跳转到登陆页面(类似就这意思)。而且最好不是在Page_load中判断权限的那种。

#6


怎么是直接输入无效?

#7


方法一:
你可以仿照asp里的做法。步骤:
1.新建admin.asp文件。输入如下内容:

<%

dim ComeUrl,cUrl,AdminName

ComeUrl=lcase(trim(request.ServerVariables("HTTP_REFERER")))
if ComeUrl="" then
response.write "<br><p align=center><font color='red'>对不起,为了系统安全,不允许直接输入地址访问本系统的后台管理页面。</font></p>"
response.end
else
cUrl=trim("http://" & Request.ServerVariables("SERVER_NAME"))
if mid(ComeUrl,len(cUrl)+1,1)=":" then
cUrl=cUrl & ":" & Request.ServerVariables("SERVER_PORT")
end if
cUrl=lcase(cUrl & request.ServerVariables("SCRIPT_NAME"))
if lcase(left(ComeUrl,instrrev(ComeUrl,"/")))<>lcase(left(cUrl,instrrev(cUrl,"/"))) then
response.write "<br><p align=center><font color='red'>对不起,为了系统安全,不允许从外部链接地址访问本系统的后台管理页面。</font></p>"
response.end
end if
end if

AdminName=replace(session("AdminName"),"'","")
if AdminName="" then
call CloseConn()
response.redirect "login.asp"
response.End()
end if
sql="select UserName from Admin where UserName='" & session("AdminName") & "' and Password='" & session("AdminPassword") & "'"
set rs=conn.execute(sql)
if rs.eof and rs.bof then
  rs.close
  response.Redirect("login.asp")
  response.End()
end if
%>


你应该可以看明白上面的代码。
2.在每个aspx页面的头部写入:
<!--#include file="admin.asp"-->
注意路径哦。

方法二:在asp.net中还有其它方法。可以通过在global.asax.cs中的Application_BeginRequest事件中判断。

方法三:在每个页面的onload事件里判断。

方法四:通过继承父类的方法判断。

以上最后三个方法在网上很容易找到例子,我就不帮你搜了。
方法一虽然是asp中的方法,但是个人认为还是很不错的,asp.net里一样可以使用。

#8


config里面好像可以修改。

#9


直接有个类文件就可以实现,不用session之类的
	<system.web>
<httpModules>
<add name="ValidateModule" type="ValidateModule"/>
</httpModules>
</system.web>

上是webconfig配置
还有,类代码:
/// <summary>
/// Summary description for ValidateModule
/// </summary>
public class ValidateModule : IHttpModule
{
    
    public void Dispose()
    { 
    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="context"></param>
    public void Init(HttpApplication context)
    {
        context.AcquireRequestState += new EventHandler(context_AcquireRequestState);
    }
    /// <summary>
    /// Page permit validate
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    void context_AcquireRequestState(object sender, EventArgs e)
    {
        try
        {
            HttpApplication application = (HttpApplication)sender;
            string requestUrl = application.Request.Url.ToString().ToLower ();
            string requestPage = requestUrl.Substring(requestUrl.LastIndexOf('/') + 1).ToLower();
            //LogWriter.Verbose("ValidateModule.context_AcquireRequestState", "request page: " + requestPage);
            if (requestPage.Contains(".aspx"))
            {
                //LogWriter.Verbose("ValidateModule.context_AcquireRequestState", "1======");
                if (!requestPage.Contains("loginform.aspx") && !requestPage.Contains("findpassword.aspx"))
                {
                    //LogWriter.Verbose("ValidateModule.context_AcquireRequestState", "2======");
                    if (application.Session["UserID"] == null)
                    {
                        //LogWriter.Verbose("ValidateModule.context_AcquireRequestState", "3======");
                        application.Response.Redirect("~/LoginForm.aspx", false);
                    }
                }
            }
        }
        catch (Exception ex)
        {
            
        }

    }
}

够详细了....试试看

#10


所有页面基础BasePage,在BasePage判断是否登录或IIhttpMoudle判断
其他设置参数,实现加密再解密

#11


谢谢楼上的大哥们。我先去试试。好多好东西。 待会结贴给分哈。

#12


JF

#13


urlrewriter