WebObjects/Web 应用/开发/身份验证和安全
Kieran Kelleher 在他的博客上写了一篇关于通过自定义属性对 EO 属性执行加密的优秀文章:http://web.archive.org/20071121050703/homepage.mac.com/kelleherk/iblog/C729512539/E2033071041/index.html
只是一些最初由 Anders Björklund 汇编的提示和技巧...
除了“通过 HTTP 的一切都不安全,对敏感数据使用 HTTPS” 的常规操作之外,还有一些 WO 特定的问题。它可以向访问者泄露很多您的设置...
首先,如果您在 WO 4.5.1 之前使用 Apache Web 服务器,请将 WebObjectsConnectionPool 设置为零以避免 Session Mixing 错误(用户会获取彼此的会话)
您可能想要检查您的系统(最好是从服务器防火墙外部)是否存在以下问题
- $HOSTNAME = host.domain.tld (您的 Web 服务器)
- $APPNAME = WOApplication 名称(您的应用程序)
http://$HOSTNAME/cgi-bin/WebObjects/
为应用程序列表设置用户名和密码。
不要允许在您的 Web 服务器上浏览目录,否则用户将能够查看所有 Web 服务器资源,并了解所有包含 Web 服务器资源的应用程序和框架的名称。
http://$HOSTNAME:1085/cgi-bin/WebObjects/wotaskd.woa/wa/woconfig
端口 1085 不应允许通过防火墙。
http://$HOSTNAME/cgi-bin/WebObjects/Monitor
监控器应不可用,或者至少受密码保护。
http://$HOSTNAME/cgi-bin/WebObjects/xyzzy
xyzzy 页面的名称/密码应更改。
http://$HOSTNAME/cgi-bin/WebObjects/$APPNAME.woa/wa/WOStats
统计页面应受密码保护(或关闭)。
http://$HOSTNAME/cgi-bin/WebObjects/$APPNAME.woa/wa/WOEventDisplay
事件页面应受密码保护(或关闭)。
http://$HOSTNAME/cgi-bin/WebObjects/$APPNAME.woa/wa/WOEventSetup
http://$HOSTNAME/cgi-bin/WebObjects/$APPNAME.woa/wo/$COMPONENTNAME.wo
这可用于以其他方式明确不允许的方式导航网站。此外,WebObjects 框架中包含许多具有众所周知名称的 WOComponent,因此可在任何 WebObjects 应用程序中访问它们。
这是一个非常严重的安全问题。以这种方式访问的 WOComponent 基本上未初始化(即,没有设置绑定)。在某些情况下,以这种方式访问未初始化的 WOComponent 会使应用程序崩溃。应阻止任何允许任何人通过对应用程序的简单 URL 调用使应用程序崩溃的方式。
http://$HOSTNAME/cgi-bin/WebObjects/$APPNAME.woa/wa/$DIRECTACTIONNAME http://$HOSTNAME/cgi-bin/WebObjects/$APPNAME.woa/wa/$DIRECTACTIONCLASSNAME/$DIRECTACTIONNAME
如果有人可以访问您的应用程序,那么他们可以使用上面的 URL 调用任何他们想要的直接操作。如果 DirectAction 名称存在,它将被调用。如果不存在,则会抛出错误(应该被捕获)。不应该随机访问的 DirectAction 应该被保护。如果您的应用程序将用户输入的文本显示到 HTML 流中,那么他们可能可以插入一个 <WEBOBJECT> 标签来显示否则不会显示的组件。
这很棘手——攻击者需要知道现有 Web 对象的名称,即使这样他们也无法覆盖绑定 (.wod) 文件中的参数。
Andrus Adamchik 指出,由于 WebObjects 的 HTML 模板系统的工作方式,您还需要使用用户输入的字符串显式调用 WOComponent.templateWithName。
以及一些由英国 WebObjects 顾问 GarrickMcFarlane 提供的杂项补充。
- 如果您保留多个适配器(例如,在 IIS 上,WebObjects.dll 和 WebObjects.exe),那么您可以对其中一个应用所有安全措施,同时仍然让另一个几乎没有保护——因为它们使用不同的名称和机制来确定您的安全设置。因此,如果您使用的是 dll,您应该考虑删除 .exe。
- xyzzy 在 4.5.1 及更高版本中被称为 WOAdaptorInfo。
- 如果您使用文件上传组件,请确保您已将 Web 服务器配置为禁止超过一定大小的文件上传,否则您的 Web/应用程序服务器/适配器/应用程序很容易被拒绝服务(动词?),通过上传大量数据。
- 如果您在应用程序级别实现用户/密码安全——例如,通过在主页上添加一个登录面板——考虑覆盖请求处理的全局部分(例如 session.appendToResponse),以检查它是否在每次请求中都设置。否则,通过意外的“后门”偷偷进入您的应用程序就太容易了。
- 您可以使用 Web 服务器身份验证并在 application.handleRequest 中类似的地方检查每个请求的标头——这样任何未经授权的请求都不会被您的应用程序处理。如果您想格外小心,您可以重新编译适配器以检查这些标头,甚至不会将请求传递给应用程序。
不要忘记您在应用程序中可能可用的任何直接操作的安全影响。
您可能还想检查您的应用程序服务器和数据库服务器的服务端口是否对公共互联网开放。通常,您只需要 80 和 443 到 Web 服务器作为唯一的通信(有一些例外:您可能还想允许 22,用于 SSH 管理,甚至可能允许 21 用于某些页面的 FTP 访问等)。
以及所有其他正常的服务器互联网连接预防措施... http://www.w3.org/Security/Faq/