我熟悉上下文对象设计模式的使用 - 围绕层之间传递的对象的轻量级上下文包装。
如果要使用上下文对象来跟踪污点(不受信任的用户输入)或原始层,我可以看到接收层如何相应地动态过滤,编码或验证。
例如: 用户发送“HTTP / HTML”上下文数据,该数据最终将作为文件存储在系统中。文件保存方法可以检测上下文并解码HTML实体,为文件上载分配随机标识符,并将用户操作和文件名关联到数据库中。
我的问题是:如果比默认应用所有过滤,编码和验证更聪明,那该怎么办?在知道原始上下文提高安全性而不仅仅是良好的输入验证/编码的情况下,存在哪些情况?
我正在使用Java / J2EE / Struts,但这可以推广到其他语言和框架。
参考文献:
http://www.corej2eepatterns.com/Patterns2ndEd/ContextObject.htm
http://www.cs.wustl.edu/~schmidt/PDF/Context-Object-Pattern.pdf
http://www.owasp.org/index.php/Category:OWASP_Security_Analysis_of_Core_J2EE_Design_Patterns_Project
谢谢,
-Ben
答案 0 :(得分:1)
我不知道应用程序层之间的污点跟踪是Context Object模式的最佳应用。据我了解,Context Object是一个保留在单个层中的对象,它为通过该层的多个消息提供服务。
我可以看到这个用作安全机制的用途是在应用程序中创建显式安全层。想象一下,当每个用户对您的系统进行身份验证时,会在该用户的安全层内创建一个安全上下文对象。安全上下文对象包含所有该用户权限的列表。从任何用户进入系统的每个请求必须首先通过安全层,并根据用户的安全上下文对象进行评估。
如果允许请求,安全层将其向上传递到更高层以进行处理。如果请求被拒绝,安全层将向用户返回错误,而应用程序的其余部分则不是更明智的。在安全层中集中安全问题可防止在整个业务和服务层中分散安全检查。
在这种情况下,安全上下文对象实现上下文对象模式。上下文对象是长期存在的,为多个用户请求提供上下文,但对请求堆栈中的较高或较低层不可见。