安全Web登录过程设计

 

风险
用户帐号被盗用、用户权限被提升。
原则
严格控制用户认证过程和认证信息,用户身份不被假冒。
控制点
2 .1是否所有受保护的文件、目录、功能模块都要求身份验证及权限验证。
2.2  用户登录窗体安全性设计要求。
2.2 .1关闭浏览器自动填充功能。
2.2 .2防止用户口令被侦听,登录口令采用加密方式向服务器传送,如:采用口令和随机ID计算MD5后向服务器传送的方式。
2.2 .3获取用户登录或操作IP采用Request.UserHostAddress,而不能采用Request[“IP”]。
2.2 .4用户IP信息应同时包含用户代理IP的情况。
(表2
- 1 )登录窗体及登录过程
A、服务器产生Key
if (Session[ " PassKey " ] == null || Session[ " PassKey " ].ToString() == "" )
            
{
                Session[
"PassKey"]=System.Guid.NewGuid().ToString();
            }

B、    用户端计算
< form name = " form1 "  method = " post "  action = " /login/login.aspx "   onSubmit = " javascript: Login_Password.value 
=  hex_md5(hex_md5(Login_Password)  + PassKey.value); " >
< input type = ”TextBox”  name = ”Login_User_ID”  autocomplete = " off " />
< input type = ”Password”  name = ”Login_Password” autocomplete = " off " />

< input type = ”hidden” name = ” PassKey”  value = ” e59c08a8 - 6de4 - 4a2b - bb2f - 356c31f67a0a” />  
C、    服务器端登录
if (Session[ " PassKey " ] == null || Session[ " PassKey " ].ToString() == System.String.Empty)
            
{
                
//转用户的会活没有开始.
                
            }

            
string  cUserID = MyHome.Security.XSS.RemoveXSS( " UserID " );
            
if (cUserID == System.String.Empty)
            
{
                
//转用户没有输入用户ID
            }


            
string  cPassword = MyHome.Security.XSS.UserInputString( " Password " );

            
if (cPassword == System.String.Empty)
            
{
                
//转用户没有输入用户Password
            }

            UserData oUserData
= new  UserData();
            
if ( ! SearchUserByID(cUserID,oUserData))
            
{
                
//转没有找到该用户
            }

            
if (MyHome.Security.Md5(MyHome.Security.Md5(cPassword,PASSWORDMD5KEY),Session[ " PassKey " ].ToString()) == MyHome.Security.Md5(oUserData.Password,Session[ " PassKey " ].ToString()))
            
{
                
//其他与登录相关的业务规则2
                
//成功,转成功操作
            }

            
else
            
{
                
//失败,转失败操作
            }

2.2 .6根据应用程序安全需求实施暴力攻击防范及强密码方案。
2.2 . 6 .1建议不采用锁定帐号或锁定IP的方案进行防暴力攻击方案。
2.2 . 6 .2可以采取连继登录失败5次后,用户必须输入验证码的方式来解决。
2.2 .7使用表单验证时,必须保证服务器上每个asp.net应用程序都具有一个独特的密钥。
Machine.Config
    
< machineKey validationKey = " AutoGenerate,IsolateApps "  
decryptionKey
= " AutoGenerate,IsolateApps "  validation = " SHA1 " />
    
2.3 .登录会话保护
2.3 .1用户退出系统或关闭浏览器时,系统清除对应会话。
2.3 .2安全性级别高的Web程序必须做会话劫持防范,在会话中检验用户浏览器的Agent头信息及客户端IP地址。
2.3 .3采用多种方式保护会话Cookie不被盗用,如:对Cookie增加HttpOnly支持,运行在SSL通道上的Web项目,明确Cookie只能在SSL上传递。
2.3 .4重要操作前,采用二次密码进行用户确认.如:用户修改已确认订单的收货地址。
表(
2 - 3 - 1 )
保存客户变量,以确定绑定到相同的客户:
    
private   void  BindingToClient()
        
{
            
string[] userIpArray=Request.UserHostAddress.Split('.');
            
string firtTwoOctets=userIpArray[0]+"."+userIpArray[1];
            
if(Session["firtTwoOctets"]==null&&Session["UserAgent"]==null)
            
{

                Session[
"firtTwoOctets"]=firtTwoOctets;
                Session[
"UserAgent"]=Request.UserAgent;
            }

            
else
            
{
                
if((string)Session["UserAgent"]!=Request.UserAgent||(string)Session["firtTwoOctets"]!=firtTwoOctets)
                
{
                    Session.Abandon();
                    
//转登录网页
                }

            }

        }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值