OWASP ESAPI 设计模式
本文探讨3种常见的OWASP企业安全API(ESAPI)设计模式。其目的是独立于开发语言之外,也就是说本文档中所述的设计模式可以应用于ESAPI所有语言版本。OWASP ESAPI Toolkits的设计初衷是使各个开发环境的开发人员都能获得功能强大操作方便的安全控件。
我们欢迎您的反馈
ESAPI的进一步开发通常通过邮件列表讨论和不定期研讨会的形式展开,欢迎大家对ESAPI的完善提出意见和建议。有关API和本文档的任何问题请发邮件至owasp‐
esapi@。
版权与许可
Copyright © 2009 The OWASP 基金会.
本文档的发行基于知识共享署名许可证3.0,对于本文档任何形式的重用和发行,您必须清楚说明本文档的使用条款。
目录
ESAPI 概述 (2)
嵌入式单例模式 (2)
拓展的单例模式 (4)
拓展的工厂模式 (5)
下一步去哪儿 (7)
图片
图1: ESAPI 工作原理示意图 (2)
图2: 嵌入式单例模式示意图 (3)
图3: 拓展的单例模式示意图 (5)
图 4: 拓展的工厂模式示意图 (7)
ESAPI 概述
OWASP ESAPI Toolkits的设计初衷是使各个开发环境的开发人员都能
获得功能强大使用方便的安全控件。各版本OWASP ESAPI 的基本调
用方式都相同,如下图所示:
图1:ESAPI的工作原理介绍
除了语言方面的差异,所有的OWASP ESAPI 版本都具有如下相同的
基本设计结构:
•都有一整套安全控件接口,并且这些接口不包含任何应用层
的逻辑。例如,在这些接口中定义了发送给不同安全控件的
参数类型,他们不包含任何私有信息或逻辑控制。
•每个安全控件接口都有一个参考示例。示例使用的类中实现
了安全控件接口中定义的方法,因此包含一定的逻辑控制。
不过这些应用逻辑并不是基于特定组织或特定应用的,同时
在这些参考示例类中也不包含任何私有信息或逻辑控制。例
如,基于字符串的输入验证。
•程序开发者可以有选择的实现自己的安全控件接口。可能这
些接口类中的应用逻辑是由您的组织开发的或者为您公司定
制的,也就是说这些应用逻辑可以被设计成是针对某项应用
或者是针对某个公司的,在这些类中也可能拥有您或者您的
公司开发的专有信息或者专有逻辑,例如:企业级身份认
证。
有三种方法可以来为每个安全控件添加您自己的应用:“嵌入式”
单例模式,“拓展”单例模式和“拓展”工厂模式。本文接下来的
部分就来探讨这三种设计模式,同时对于一些情况来说可能适合于
使用不止一种模式来解决问题。
嵌入式单例模式
ESAPI 安全控件接口中包含一个通常被称为“定位器”的ESAPI类。
这个类用于获取一个安全控件中的已实例化的单例对象,这些实例
化的单例对象被调用来执行安全检查(如进行访问控制检测)或产
生安全效用(如生成审计日志)。
“嵌入式”单例模式指的是,开发者可以使用自己的实现代码,来
替换已有安全控件的参考示例。否则,ESAPI 程序接口保持不变。
例如:
...
require_once dirname(__FILE__) . '/../Authenticator.php';
...
//your implementation
class MyAuthenticator implements Authenticator {
...
开发者对ESAPI 的调用如下所示:
...
$ESAPI = new ESAPI();
$myauthenticator = new MyAuthenticator();
//register with locator class
ESAPI::setAuthenticator($myauthenticator);
$authenticator = ESAPI::getAuthenticator();
$authenticator->login(...); //use your implementation
...
上述例子的UML如图2所示:
图2:嵌入式单例模式示例
&
采用这种方法的优点是可以在ESAPI和您自己的程序代码中实现松
耦合。
缺点则是需要开发者理解如何根据自己公司或者应用的需要使用正'
确的参数来调用ESAPI的方法。
拓展的单例模式
虽然ESAPI 的安全控件引用实现即可进行安全检测而且能依据
公司或者应用的需要产生一些安全效用,我们还是需要降低使用门
槛,使开发人员无需对ESAPI如何通过传入和公司或者应用相关的
参数执行过程工作原理做更多了解。
拓展的单例模式指的是开发者自己实现相应的安全控件,来替
代已有安全控件的引用实现。并支持添加、修改、删除方法相应的
安全控件接口。
例如:
...
require_once dirname(__FILE__) . '/../Validator.php';
...
//reference implementation
class DefaultValidator implements Validator {
api设计...
//not defined in Validator interface
function isValidEmployeeID($eid) {
.
..
在本例中开发者可以按下面的方式调用ESAPI:
...
$ESAPI = new ESAPI();
$validator = ESAPI::getValidator();
$validator->isValidEmployeeID(1234);
...
上述例子的UML如下图所示:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论