也可以在此讨论讨论的。。
13 个解决方案
#1
来人啊、、、
#2
1.Request.UrlReferrer 是否是前一个页面的地址.
但这个可以用程序做假.
2.链接中加参数,密文之类的,这个手工输入比较困难
但这个可以用程序做假.
2.链接中加参数,密文之类的,这个手工输入比较困难
#3
你直接从你的连接中复制 放到URL里面看能不能实现
#4
第一个懂。
第二个呢~?我先去网上找找、学习学习
#5
啊。。我的意思是指链接过去可以。但是直接在地址栏中输入(除了后台的登录页面)地址,就会跳转到登陆页面(类似就这意思)。而且最好不是在Page_load中判断权限的那种。
#6
怎么是直接输入无效?
#7
方法一:
你可以仿照asp里的做法。步骤:
1.新建admin.asp文件。输入如下内容:
你应该可以看明白上面的代码。
2.在每个aspx页面的头部写入:
<!--#include file="admin.asp"-->
注意路径哦。
方法二:在asp.net中还有其它方法。可以通过在global.asax.cs中的Application_BeginRequest事件中判断。
方法三:在每个页面的onload事件里判断。
方法四:通过继承父类的方法判断。
以上最后三个方法在网上很容易找到例子,我就不帮你搜了。
方法一虽然是asp中的方法,但是个人认为还是很不错的,asp.net里一样可以使用。
你可以仿照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之类的
上是webconfig配置
还有,类代码:
够详细了....试试看
<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.链接中加参数,密文之类的,这个手工输入比较困难
但这个可以用程序做假.
2.链接中加参数,密文之类的,这个手工输入比较困难
#3
你直接从你的连接中复制 放到URL里面看能不能实现
#4
第一个懂。
第二个呢~?我先去网上找找、学习学习
#5
啊。。我的意思是指链接过去可以。但是直接在地址栏中输入(除了后台的登录页面)地址,就会跳转到登陆页面(类似就这意思)。而且最好不是在Page_load中判断权限的那种。
#6
怎么是直接输入无效?
#7
方法一:
你可以仿照asp里的做法。步骤:
1.新建admin.asp文件。输入如下内容:
你应该可以看明白上面的代码。
2.在每个aspx页面的头部写入:
<!--#include file="admin.asp"-->
注意路径哦。
方法二:在asp.net中还有其它方法。可以通过在global.asax.cs中的Application_BeginRequest事件中判断。
方法三:在每个页面的onload事件里判断。
方法四:通过继承父类的方法判断。
以上最后三个方法在网上很容易找到例子,我就不帮你搜了。
方法一虽然是asp中的方法,但是个人认为还是很不错的,asp.net里一样可以使用。
你可以仿照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之类的
上是webconfig配置
还有,类代码:
够详细了....试试看
<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