本人对于安全问题很重视,所以写程序的时候考虑安全问题比较多,这几天在研究后台登陆的问题,请教各位给我一套安全的方案,思路或是代码均可.方案主要是解决这些问题.1.session和cookies这两个登陆的时候的运用问题,两个都用吗?
2.从admin_login.aspx登陆成功后,转到admin_index.aspx页面,这个时候要在左上角显示登陆用户名和权限的,如:
用户名:kgdiwss
身份:系统CEO
我的一人思路是后台登陆的时候,就把登陆的用户名,IP等写到一个Loginlog表中,不知道大家如何处理.3.如果避免不登陆就直接进入admin_index.aspx,也就是如何实现没有登陆就转到admin_login.aspx,下面这段代码好像不够.
if (session["LoginUser"] == null)
{
Response.Redirect("admin_login.aspx");
}希望各位能把后台登陆开始的代码贴出来看看.本人下载了好多源码,都没有找到理想的答案.
2.从admin_login.aspx登陆成功后,转到admin_index.aspx页面,这个时候要在左上角显示登陆用户名和权限的,如:
用户名:kgdiwss
身份:系统CEO
我的一人思路是后台登陆的时候,就把登陆的用户名,IP等写到一个Loginlog表中,不知道大家如何处理.3.如果避免不登陆就直接进入admin_index.aspx,也就是如何实现没有登陆就转到admin_login.aspx,下面这段代码好像不够.
if (session["LoginUser"] == null)
{
Response.Redirect("admin_login.aspx");
}希望各位能把后台登陆开始的代码贴出来看看.本人下载了好多源码,都没有找到理想的答案.
解决方案 »
- 正则表达式截取问题
- 关于数组循环比较问题求解。
- 有谁知道:如何在asp.net中动态的合并表格的单元格 ???
- gridview绑定对象时dropdownlist的问题
- 初学者问asp.net:visual studio.net2003适合做网页编辑吗?
- 小问题,路过帮看一下,马上揭帖!!
- 如何在输入框中过滤<a></a>、<tr></tr>等HTML标记?
- 关于对话框的问题,急!!!各位大侠帮帮忙
- 一个和路径相关的问题!
- 如何动态程序增加toolbar中的按钮
- 在ASP.Net开发中,我想自己写程序解析 <httpHandlers>元素,可以实现吗?如何实现?
- 疯了。。。。web.config文件怎么配置阿 ???
推荐一本书 ASP.NET安全性高级编程
这才是最好的办法啊
如果找到了,给我一份
近来我也在研究
[email protected]
如果找到了,给我一份
近来我也在研究
[email protected]
<configuration>
<system.web>
<!-- 动态调试编译 设置 compilation debug="true" 以启用 ASPX 调试。否则,将此值设置为
false 将提高此应用程序的运行时性能。
设置 compilation debug="true" 以将调试符号(.pdb 信息) 插入到编译页中。因为这将创建执行起来 较慢的大文件,所以应该只在调试时将该值设置为 true,而在所有其他时候都设置为 false。有关更多信息,请参考有关 调试 ASP.NET 文件的文档。 -->
<compilation
defaultLanguage="c#"
debug="false"
/>
<!-- 自定义错误信息 设置 customError 模式值可以控制应向 用户显示用户友好错误信息而不是错误详细信息(包括堆栈跟踪信息): “On”始终显示自定义(友好的)信息
“Off”始终显示详细的 ASP.NET 错误信息。 “RemoteOnly”只对不在本地 Web 服务器上运行的 用户显示自定义(友好的)信息。出于安全目的,建议使用此设置,以便
不向远程客户端显示应用程序的详细信息。 -->
<customErrors mode="RemoteOnly" defaultRedirect="Main/Login.aspx"/>
<!-- 身份验证
此节设置应用程序的身份验证策略。可能的模式是“Windows”、“Forms”、 “Passport”和“None” -->
<authentication mode="Forms">
<forms name=".Forms" loginUrl="Main/Login.aspx" protection="All" timeout="30" path="/">
</forms>
</authentication>
<authorization>
<deny users="?" />
<allow users="*"/>
</authorization>
<!-- 应用程序级别跟踪记录
应用程序级别跟踪在应用程序内为每一页启用跟踪日志输出。 设置 trace enabled="true" 以启用应用程序跟踪记录。如果 pageOutput="true",则
跟踪信息将显示在每一页的底部。否则,可以通过从 Web 应用程序
根浏览 "trace.axd" 页来查看
应用程序跟踪日志。 -->
<trace
enabled="false"
requestLimit="10"
pageOutput="false"
traceMode="SortByTime"
localOnly="true"
/> <!-- 会话状态设置 默认情况下,ASP.NET 使用 cookie 标识哪些请求属于特定的会话。 如果 cookie 不可用,则可以通过将会话标识符添加到 URL 来跟踪会话。 若要禁用 cookie,请设置 sessionState cookieless="true"。 -->
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;user id=sa;password="
cookieless="false"
timeout="30"
/>
<pages buffer="true" smartNavigation="false"/> <!-- 全球化 此节设置应用程序的全球化设置。 -->
<globalization requestEncoding="GB2312" responseEncoding="GB2312"/>
</system.web>
<location path="Default.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location> </configuration>
<configuration>
<system.web>
<!-- 动态调试编译 设置 compilation debug="true" 以启用 ASPX 调试。否则,将此值设置为
false 将提高此应用程序的运行时性能。
设置 compilation debug="true" 以将调试符号(.pdb 信息) 插入到编译页中。因为这将创建执行起来 较慢的大文件,所以应该只在调试时将该值设置为 true,而在所有其他时候都设置为 false。有关更多信息,请参考有关 调试 ASP.NET 文件的文档。 -->
<compilation
defaultLanguage="c#"
debug="false"
/>
<!-- 自定义错误信息 设置 customError 模式值可以控制应向 用户显示用户友好错误信息而不是错误详细信息(包括堆栈跟踪信息): “On”始终显示自定义(友好的)信息
“Off”始终显示详细的 ASP.NET 错误信息。 “RemoteOnly”只对不在本地 Web 服务器上运行的 用户显示自定义(友好的)信息。出于安全目的,建议使用此设置,以便
不向远程客户端显示应用程序的详细信息。 -->
<customErrors mode="RemoteOnly" defaultRedirect="Main/Login.aspx"/>
<!-- 身份验证
此节设置应用程序的身份验证策略。可能的模式是“Windows”、“Forms”、 “Passport”和“None” -->
<authentication mode="Forms">
<forms name=".Forms" loginUrl="Main/Login.aspx" protection="All" timeout="30" path="/">
</forms>
</authentication>
<authorization>
<deny users="?" />
<allow users="*"/>
</authorization>
<!-- 应用程序级别跟踪记录
应用程序级别跟踪在应用程序内为每一页启用跟踪日志输出。 设置 trace enabled="true" 以启用应用程序跟踪记录。如果 pageOutput="true",则
跟踪信息将显示在每一页的底部。否则,可以通过从 Web 应用程序
根浏览 "trace.axd" 页来查看
应用程序跟踪日志。 -->
<trace
enabled="false"
requestLimit="10"
pageOutput="false"
traceMode="SortByTime"
localOnly="true"
/> <!-- 会话状态设置 默认情况下,ASP.NET 使用 cookie 标识哪些请求属于特定的会话。 如果 cookie 不可用,则可以通过将会话标识符添加到 URL 来跟踪会话。 若要禁用 cookie,请设置 sessionState cookieless="true"。 -->
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;user id=sa;password="
cookieless="false"
timeout="30"
/>
<pages buffer="true" smartNavigation="false"/> <!-- 全球化 此节设置应用程序的全球化设置。 -->
<globalization requestEncoding="GB2312" responseEncoding="GB2312"/>
</system.web>
<location path="Default.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location> </configuration>
{
string strLoginID=username.Text.Trim();
string strPassword=password.Text.Trim();
LoginClass lgc=new LoginClass();
string strReason;
string strLoginflag=lgc.weblogin(strLoginID,strPassword);
if(strLoginflag=="admin"||strLoginflag=="student")
{
Response.Cookies["empint"].Value=username.Text;
Response.Cookies["empint"].Expires=DateTime.Now.AddDays(10);
Session["LoginID"]=strLoginflag;
Session["username"]=username.Text;
if(strLoginflag=="admin")
Response.Redirect("Main.aspx");
else
Response.Redirect("Manager.aspx");
//关闭登陆框
Response.Write("<script language=javascrip>");
Response.Write("windows.opener=null;");
Response.Write("windows.close();");
Response.Write("</script>");
}
else if(strLoginflag=="failure")
{
strReason="用户名和密码不匹配!";
Response.Write("<script language=javascrip>");
Response.Write("windows.alert(");
Response.Write(strReason);
Response.Write(")");
Response.Write("</script>");
}
}
先在web.config中加入这段代码,这个不难理解:
<authentication mode="Forms" >
<forms name="MyAppFormAuth" loginUrl="login.aspx" protection="All" timeout="20" path="/">
</forms>
</authentication> <authorization>
<allow users="*" />
</authorization>这里的forms name指的是不是各个页面的form的ID啊,每个页面的form的ID都必须相同是吗?
接下来,如下代码:
//进行表单身份验证(产生门票)
FormsAuthenticationTicket tkt =new FormsAuthenticationTicket(1,user.UserName,DateTime.Now,DateTime.Now.AddDays(30),true,user.RoleName);
string cookiestr = FormsAuthentication.Encrypt(tkt);
HttpCookie ck = new HttpCookie(FormsAuthentication.FormsCookieName,cookiestr);
Response.Cookies.Add(ck);//进入主界面
Response.Redirect("WebMain/frmMain.aspx");这段代码中:
new FormsAuthenticationTicket()这里面的参数有6个,它们的顺序是不是必须像上面这样?哪几个是固定不变的,哪几个是要用户自定义的,麻烦各位将以上代码一行行注释一下,我看后不是很明白原理,为什么这样写就可以做到验证啊,请帮帮忙.
Session["LoginUser"] = tbLoginPwd.Text;
Session["IsLogin"] = true;在admin_left.aspx中,我用
lbLoginUser.Text = Session["LoginUser"].ToString();
显示用户身份,可是提示没有将对象应用到实例什么的.这是为什么?
我在admin_login.aspx登陆按钮登陆成功时写了:
Session["LoginUser"] = tbLoginPwd.Text;
Session["IsLogin"] = true;
Response.Redirect("admin_index.aspx");admin_index.aspx其实是一个框架页,左边链接的是admin_left.aspx,用来显示添加文章等后台栏目,右边链接的是admin_right.aspx,用来显示使用说明等.现在就是要实现这样一个效果.在admin_left.aspx的顶部,显示出登录的用户名及其身份.在admin_left.aspx中,我在Page_Load事件中这样写:
lbLoginUser.Text = Session["LoginUser"].ToString();
可是提示没有将对象应用到实例什么的.于是我换成了:
lbLoginUser.Text = (string)Session["LoginUser"];
结果没有提示出错,不过lbLoginUser里没有显示任何东西。
现在就是不知道问题出在哪里.郁闷中.