`
sslaowan
  • 浏览: 379799 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

J2EE安全问题

阅读更多

经过今天一天的研究,大概对于J2EE规范有了个思路,主要的技术要素大概是这么个关系,不知道对不对,我想应该问一下专家。

主要参考的书是罗时飞的《敏捷AcegiCAS——构建安全的Java系统》,由于本文多次引用该书,因此以下简称[07]

J2EE规范

我阅读了JSR-115Java Authorization Contract for Containers),以下是对于该规范的简介(我不知道是不是这个规范就是J2EE安全方面的所有规范):

The contract defined by this specification is divided into three subcontracts. Taken together, these subcontracts describe the installation and configuration of authorization providers such that they will be used by containers in performing their access decisions. The three subcontracts are the Provider Configuration Subcontract, the Policy Configuration Subcontract, and the Policy Decision and Enforcement Subcontract.

我的理解是,其主要是定义了一些安全概念,JAAS InterfaceJAAS Provider,还有如何为ServletEJB等提供安全服务。

<o:p> </o:p>

       这篇叫做J2EE中的安全第一部分介绍了J2EE中的概念,体系结构(声明式,编程式)和认证模型(基于HTTP请求,基于表单,基于摘要(Digest),基于.X509证书)。

<o:p> </o:p>

我主要研究了WebSphereWebLogicAcegiJ2EE规范的关系,觉得似乎这三者首先都包含了对于规范的实现,比如如何进行基于HTTP请求的认证。而且三者都超越了规范。

WebLogic安全框架和Acegi都存在对于J2EE容器提供的API的一定程度的封装和抽象。

<o:p> </o:p>

关于JAAS,这个是J2SE规范中定义的Java认证和授权服务,在J2EE中由容器对于其进行了封装;它和Acegi的关系可以看作是替代关系,使用JAAS定义的LoginModule实现类来完成认证,当然为了保持一致性可以通过AcegiJaasAuthenticationProvider将用户认证请求转给JAAS;使用Acegi,就用SecurityContextLoginModule。这是参照[ 07]的说法。对于AcegiJAAS的认识还都比较初级,所以概念上也不知道对不对。

<o:p> </o:p>

<o:p> </o:p>

J2EE认证与授权

认证和授权是两件事,从我看的资料的角度来说,有以下想法:

1.         过去我们的做法:无论是使用ASPDelphiJSP,都是在数据库建一张用户表,一张权限表。认证包括登录时,对比输入的和数据库中的用户名、密码;进入某个功能模块时,或者进行某个操作时,到权限表中查看是否具有这个权限。

2.         J2EE规范的做法:

1)        对于过去所说的用户表,按照IBM WAS的文档说法叫用户注册表,来源有三个:Local OSLDAP和用户自定义注册表(需要实现UserRegistry接口)。在这里提到了LDAP,按照OpenLDAP管理员手册的说法,LDAP是优化访问的数据库。所谓优化,一是专门为了读操作远大于写操作的需求作了优化;二是对于树的操作做了优化。而用户,组,角色,正好符合这种数据结构。

2)        所谓认证,就是从上述三种用户注册表中查找对应的用户

3)        J2EE容器提供了进行配置,就可以自动认证的能力。如果不这样,可以用Acegi来做。两者又是互斥关系。当然可以利用Acegi来封装不同容器的细节差异。

4)        所谓授权,则是读取授权文件,还有不少授权类,这些文件和类和用户邦定在一起,使用容器则部署在容器相应的文件中,比如web.xml。如果使用Acegi,则写在Spring配置文件中。而且使用Acegi,还提供了从数据库中取得授权信息的能力。

5)        这些访问控制,主要是基于对象的,也就是说某个角色是否可以访问某个JSP页面或Servlet,是否可以访问EJB某个方法,是否可以访问某个类。J2EE容器只支持保护EJB方法,不支持POJO领域对象,而Acegi提供了这种支持。

6)        看《JAVA核心技术》的安全部分,主要讲的包括Java自身的安全性(类型检查之类的),类加载器,对于某段代码的访问控制。

7)        WAS的文档,一部分讲的似乎又是J2EE服务器本身的安全性,比如对于进入控制台的控制。

<o:p> </o:p>

那么我的疑问是:<o:p></o:p>

1.         是不是J2EE规范中的访问控制(认证和授权)就是指:对于授权的用户和角色,它是否可以访问编写的某段代码(EJBPOJO的业务方法,领域对象中的持久化对象(实体BeanPOJO))?还包括对于代码的保护,比如不能被人随意篡改?<o:p></o:p>

2.         基于某些帖子的讨论,觉得似乎J2EE访问控制和对于业务的操作控制是两回事。比如,初级会员在javaeye上只能发帖,不能打分,这样的权限控制就和JAAS之类的东西没关系了;还有比如用户登录到一个Java客户端,他只能看到他可以操作的那些功能菜单或按钮(将控件的可见性设为false),这些也和JAAS之类的东西没关系了。这些使用J2EE规范或Acegi都是解决不了的问题?<o:p></o:p>

3.         J2EE规范(比如JAAC)或者是Acegi可以给我们提供多种认证的选择:用户名/密码方式或各种证书? <o:p></o:p>

<o:p> </o:p>

J2EE加密传输

这也是J2EE规范中定义好的一大部分重要内容,比如JSR-154中对于HTTPSSSLTLS)的支持,还有对于MD5SHA-I的加密算法的支持,公钥秘钥等的支持。

我的问题是:<o:p></o:p>

J2EE容器中,比如WAS中,是不是就可以直接利用其基础设施来实现加密传输呢?不需要直接调用J2SEAPI了吧。<o:p></o:p>

LDAP

 其作用主要就是提供用户注册表(就是以前应用中用的USER表,不过我们自己用的USER表里还包括照片之类的,不过那应该算作人员信息表,而不是USER表了)。

我的问题是:<o:p></o:p>

1.         如果对多个系统(异构平台)进行整合,是不是意味着只是从LDAP里获得个账户信息就可以了,简单而言就是用户名和密码。<o:p></o:p>

2.         是否不再需要给每个系统建立USER表了?还有做法是LDAP分为主和节点,每个系统也都使用LDAP,不过如果每个系统用户不多,似乎就没这个必要了。<o:p></o:p>

单点登录(SSO

     WASWebogic都能提供自带的单点登录,方法基本上就是基于Cookie和基于共享Session的。而且只能用于都是J2EE服务的情况下。

 

     那么对于异构平台的系统的SSO解决方案,似乎是要依靠CAS了。

http://blog.csdn.net/lwsolos/archive/2006/07/04/876796.aspx,这篇文章对于SSO进行了一些总结,讲述了实现的方法。

     我的问题是:

1.         利用JA-SIG CAS(基于Token的)可以解决异构平台的SSO问题吗?看网上有人说利用Web ServiceCAS实现了。这种方法是否可行呢?<o:p></o:p>

2.         CAS要借助于LDAP,获得用户信息,然后制作凭证?是这样吗?觉得似乎用了CAS就不需要LDAP了。

分享到:
评论
2 楼 SINCE1978 2008-08-26  
楼上的朋友给推荐一些嘛

1.jaas应该没有“对于代码的保护”功能。这是不是已经超出了jaas范畴了?属于操作系统如何防黑客吧?

2.jaas不是专为B/S架构java应用制定的规范,我觉得它更偏向于底层安全机制。比如典型的CallbackHandler + Callbacks处理形式完全不适用于表单提交用户名密码的B/S架构,所以才有流行的:(new CallbackHandler(username,password)).handle(Callbacks[])这种变通处理方式。

3.是啊

总之jaas这套API真是相当的烂,也不见有什么改进的趋势,要说jaas只包含最核心的安全概念(为此jaas连User接口都没有),但是却又连CallbackHandler + Callbacks这种细节都定义,我觉得这完全让用户自己去实现好了啊,只要能获得认证的必要信息不就达到目的了吗。
1 楼 guojingxf 2008-06-01  
你多看一寫acegi的資料,就會明白很多

相关推荐

    j2ee安全体系架构

    总的来说,J2EE安全体系架构提供了一个全面的框架,帮助开发人员构建安全的企业级应用,满足现代商业环境中复杂的安全需求。开发者应充分利用这些特性,结合最佳实践,确保应用程序的健壮性和安全性。

    J2EE安全 (web开发)

    关于j2EE开发的常见安全问题。 关于j2EE开发的常见安全问题。

    J2EE工程实现中常见安全问题解决对策.rar

    以下是一些常见的J2EE安全问题及其解决对策: 1. **不安全的身份验证与授权** - 解决对策:确保使用强大的身份验证机制,如基于角色的访问控制(RBAC),并使用HTTPS协议进行加密传输。避免硬编码用户名和密码,...

    J2ee平台安全技术架构

    Java 2 Enterprise Edition (J2EE) 平台的安全技术架构是企业级应用程序开发的核心组成部分,它确保了数据、资源和应用服务的保护。在J2EE中,安全架构涉及多个层面,包括身份验证、授权、加密、会话管理以及防止...

    J2EE工程实现中常见安全问题解决对策

    本文主要探讨了几个关键的安全问题以及相应的解决对策,包括Session的安全管理、客户端缓存的安全设计,以及涉及到的相关技术如EJB、JAAS、JSP、JDBC等。 首先,Session的安全问题是一个核心关注点。Session通常...

    J2EE常见问题

    ### J2EE常见问题解析 #### J2EE的优势 Java 2 Platform, Enterprise Edition(J2EE)作为企业级应用开发的重要平台,拥有诸多优势,使其成为构建复杂、高可用性和可扩展性企业级应用的首选。其优势主要包括: 1....

    企业级Java安全性(构建安全的J2EE应用)

    为了帮助开发人员构建安全的J2EE应用,本书详细地描述了J2EE安全技术,包括Servlet、JSP、EJB的安全——这些技术是J2EE体系结构的核心。另外本书还涵盖了Web服务的安全技术。 本书还详细描述了Java与加密技术之间的...

    J2EE安全开发(92张).pdf

    J2EE安全开发

    acegi应用安全J2EE安全

    Acegi Security是Spring社区早期开发的一个安全框架,用于增强J2EE应用程序的安全性。这个框架在Spring Security(之前称为Acegi Security)的后续版本中得到了发展和改进,成为了Spring生态中的核心组件。本文将...

    J2EE 指南 J2EE中文教材

    - **常见问题和解决方法**:列举了一些常见的问题及其解决方案。 - **第三章:企业Bean**: - **企业Bean概述**:概述了EJB的概念和用途。 - **会话Bean**:深入探讨了会话Bean的类型和使用场景。 - **Entity...

    j2ee实例 j2ee实例j2ee实例

    J2EE(Java 2 Platform, Enterprise Edition)是Oracle公司推出的用于构建企业级分布式应用程序的框架,它提供了服务器端的编程模型和运行环境,支持多种服务,如事务处理、安全、集群、数据库连接等。本实例集合将...

    J2EE常见问题 J2EE平台的特征与优点

    ### J2EE常见问题解析:平台特征与优点详解 #### 一、J2EE平台概述 **Java2 Platform, Enterprise Edition (J2EE)** 是一个由Sun Microsystems开发的企业级Java平台标准,它基于Java2 Platform, Standard Edition ...

    J2EE JAR包(J2EE1.3 J2EE1.4 J2EE5.0 )

    Java 企业版(Java 2 Platform, Enterprise Edition,简称 J2EE)是 Sun Microsystems 推出的用于构建分布式、多层企业级应用的框架。它为开发者提供了多种服务和组件模型,包括Java Servlets、JavaServer Pages ...

    J2ee常见问题手册.rar

    8. **安全问题** - **权限控制**:确保用户的操作权限被正确设定,防止未授权访问。 - **SSL配置**:对于敏感信息传输,启用HTTPS以保证通信安全。 9. **日志与调试** - **日志记录**:合理设置日志级别,以便于...

    J2EE开发中常见的问题总结

    【J2EE开发常见问题详解】 在J2EE开发中,开发者经常遇到一系列的问题,这些问题不仅涉及技术细节,还关乎架构设计和应用部署。本文将深入探讨这些常见问题,帮助开发者提升开发效率和解决问题的能力。 1. **容器...

    J2EE指南(J2EE tutorial )

    - **定义与背景**:J2EE(Java 2 Platform, Enterprise Edition)是一个用于开发和部署可移植、健壮、可伸缩且安全的多层Web应用的企业级Java平台。1993年8月,随着Java技术的发展,尤其是Oak编程语言(后更名为Java...

    J2EE网上购物系统

    5. **安全性考虑**:在开发J2EE网上购物系统时,必须重视安全问题,例如防止SQL注入、XSS攻击,实现安全的会话管理,以及对敏感数据进行加密传输。 6. **部署与扩展性**:由于J2EE平台的特性,该系统可以轻松部署在...

    开发J2EE Web应用

    开发人员必须遵循安全编码准则,利用J2EE提供的安全框架来保护应用免受攻击。 ### 结论 《Designing Enterprise Applications with the Java 2 Platform, Enterprise Edition》不仅是J2EE开发者的宝典,也是一本...

Global site tag (gtag.js) - Google Analytics