WEB开发网
开发学院网络安全安全技术 关于web应用程序安全的思考(二) 阅读

关于web应用程序安全的思考(二)

 2008-11-26 13:35:57 来源:WEB开发网   
核心提示: 现在我们一个一个的接口来做实现1.认证接口要对所有的request作出管控,显然只有一种认证方法是远远不够的,关于web应用程序安全的思考(二)(3),就简单如aspx和web service吧,前者可以通过cookie或session来存储用户ID,今天就先到这里吧,下篇我会对授权进行实

现在我们一个一个的接口来做实现

1.认证接口

要对所有的request作出管控,显然只有一种认证方法是远远不够的,就简单如aspx和web service吧,前者可以通过cookie或session来存储用

户ID,而后者就有可能通过soap header或某个参数来调用,甚至以后还会出现其它的user id提取方法。所以对于默认的认证类别我没有使用

hardcode方法,而是采用动态加载动态模组来完成。

//首先我会增加一个认证模组,每个认证模组实现某一类Request的认证方式

Interface IAuthenticateModule
{
  //是否匹配本次请求,采用当前这个认证模组
  bool IsMatch();
  
  //认证
  string Authenticate();
  
}
  
//我对认证的实现
class DefaultAuthenticate:IAuthenticate
{
  //加载的认证模组
  ArrayList _modules = new ArrayList(); 
  
  static DefaultAuthenticate()
  {
    读取本系统的配置,利用反射机制动态加载认证模组
  }
  
  //认证
  string Authenticate()
  {
   //遍历每个模组,找出第一个匹配的模组进行认证
   //所以与配置的顺序有关(如果有2个相同的匹配,可以把专用的模组放在前面)
   foreach(IAuthenticateModule module in _modules)
   { 
     if(module.IsMatch())
     {
       return module.Authenticate();
     }
   }
  }
}

//至于实现则很简单

//如以下为aspx的认证方式
class WebFormAuthenticateModule:IAuthenticateModule
{
  bool IsMatch()
  {
    if(Request.Url请求的是aspx文件)
      return true;
    return false;
  }
  
  string Authenticate()
  {
    if(Session["userid"]!=null)
      return Session["userid"].ToString();
    return null;
  }
}
  
//以下为webservice的认证方式
class WebServiceAuthenticateModule:IAuthenticateModule
{
  bool IsMatch()
  {
    if(Request.Url请求的是asmx文件)
      return true;
    return false;
  }
  
  string Authenticate()
  {
    string userid = 提取soap头的user id栏位
    return userid;
    
  }
}

当然您可以在您的安全模组中默认先实现一些认证模组,然后配置时放在后面一些。如果您的新系统有新的认证方式,只要实现一个新的认证模组再配置进去就可以了。

今天就先到这里吧,下篇我会对授权进行实现,希望能给大家一些启发。

上一页  1 2 3 

Tags:关于 web 应用程序

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接