保护 Windchill 解决方案的最佳实践
下表提供了一些有助于保护 Windchill 解决方案的基本操作。其中一些操作包括自定义文件。有关自定义最佳实践的详细信息,请参阅 Windchill Customization Guide (《Windchill 自定义指南》)。
|
提供此信息只是为了帮助您完成 Windchill 的安全配置。PTC 不对此处提及的任何第三方产品提供支持,也不对您的安全性体系结构负责。
|
1. 将 Web 服务器配置为使用 HTTPS。
当 web 应用程序数据在浏览器 (客户端) 和 web 服务器之间传输时,HTTPS 使用安全套接字层/传输层安全性 (SSL/TLS) 防止这些数据在未授权的情况下被泄漏和修改。
|
作为安全部署指南,PTC 强烈建议您在安装 Windchill 时配置 HTTP 严格传输安全 (HSTS)。
|
2. 将用于保护敏感信息的加密密钥长度由 128 位 (默认) 修改为 256 位。有关详细信息,请参阅
修改加密密钥长度。
3. 通过开启 Oracle 透明数据加密 (TDE) 保护静态数据。加密 Windchill 数据库中的数据可避免通过未授权的访问查看数据。这为您的 IP 提供了额外的一层保护,并减小了 Windchill 解决方案的整体攻击面。
4. 在生产服务器的 Windchill web 可访问目录中移除以下内容:
◦ 实施示例
◦ 示例代码
◦ API 文档
这些示例包括但不限于:
◦ <Windchill>/codebase/infoengine/docs/apidocs
◦ <Windchill>/codebase/netmarkets/jsp/apiDocs
◦ <Windchill>/codebase/netmarkets/jsp/carambola
◦ <Windchill>/codebase/wt/clients/library
◦ <Windchill>/codebase/wt/clients/filevault/*.doc
◦ <Windchill>/codebase/CustomizerDoc
◦ <Windchill>/codebase/wt/fv/docs
◦ <Windchill>/codebase/com/ptc/core/HTMLtemplateutil/examples
◦ <Windchill>/codebase/config/logicrepository/xml/explorer/structureexplorer/configurablelinksexample
◦ <Windchill>/codebase/CambridgeDocs3/SampleData
◦ <Windchill>/codebase/registry/ixb/samples
其中,<Windchill> 是 Windchill 的安装位置。
5. 保护 WEB-INF 目录。
检查
<Windchill>\codebase\WEB-INF</Windchill> 中的内容是否可访问。Apache 的默认配置计划为拒绝从 web 客户端对该目录及其内容的所有访问。但是,由于 Windchill 11.0 中 Apache 默认配置的退化,可能也可以从 web 客户端对该目录的内容进行访问。即使已在 11.0 CPS 版本和维护版本中解决了此问题,但仍建议您进行验证,如果可访问,则请执行修正操作。有关此问题的详细信息,请参阅
支持文章 CS256080
a. 要确定此目录是否已打开,请访问以下 URL:http://<您的主机名称>/Windchill/WEB-INF/webapp.properties
b. 如果验证后显示该文件,则说明目录可访问。
6. 默认启用跨站请求伪造 (CSRF) 保护,使
Windchill 中的数据更改操作免受 CSRF 攻击。有关详细信息,请参阅
跨站请求伪造。
7. 为 Windchill 解决方案建立加强的密码策略。加强密码具有下列特征:
◦ 具有最小密码长度
◦ 包含大写字母、小写字母、数字和特殊字符
◦ 不包含用户名或组织名
◦ 具有到期日期
◦ 包括在尝试指定数量的登录后锁定帐户。默认情况下,在一行内连续输入 5 次错误密码后,WindchillDS 将锁定相应帐户。锁定的有效时间为 15 分钟。
8. 更改在加载数据期间创建的默认帐户的密码。它们通常包括 wcadmin 或 demo。设置新密码时,通过下列先前列出的加强密码特征来使用加强密码。
9. 当用户离开公司时,将他们从 Windchill 中移除。如果以后其他人将重新使用该用户名,则通过从 Windchill 中完全移除用户,可避免任何问题。可通过下列步骤完全移除用户:
a. 从目录服务中移除用户或移除 Windchill 对用户条目的可见性。
b. 在“参与者管理”实用程序中,使用“从 Windchill 中删除”操作。
有关从
Windchill 中删除用户的详细信息,请参阅
删除用户。
10. 确保在 web 服务器上禁用目录列表。出厂时,HTTP Server 不允许使用目录浏览功能。
11. 针对严重事件启用审计。在调查任何可疑活动时,创建已记录事件的常规记录很有价值。出厂时,Windchill 会记录系统使用情况、组织使用情况、下载事件以及任何潜在的 CSRF 事件。
考虑记录下列审计事件:
◦ 用户登录
◦ 用户注销 (仅使用基于表单的验证)
◦ 用户密码更改
◦ 所有访问控制修改:
▪ 访问权限和策略更改
▪ 团队、角色和组的更改
◦ 内容添加、删除或移动:
▪ 导入
▪ 导出
▪ 下载
▪ 查看表示
▪ 跨上下文共享
◦ 对象或参与者创建或删除
◦ 生命周期状态更改
◦ 安全标签修改 (如果启用了安全标签)
如果启用审计事件日志记录,还应考虑通过移除 Windchill 数据库应用程序用户对所有审计表格的移除删除权限以防止从 Windchill 中清除审计记录。要移除该权限,
a. 使用 Oracle SQLplus 实用程序以数据库管理员身份登录到数据库。
b. 如果尚不存在 Windchill 数据库应用程序用户,请创建一个。可通过执行 <Windchill>\db\sql\create_wc_app_user.sql 脚本创建该用户。
c. 使用以下命令移除 Windchill 数据库应用程序用户对 Windchill 审计表格的“删除”权限:SQL> revoke delete on <WC_db_user>.AuditRecord from <WC_db_user> (其中 <WC_db_user> 为数据库应用程序用户名)。
d. 停止 Windchill 服务器。
e. 在 Windchill shell 中运行以下命令更新具有数据库应用程序用户信息的数据库特性:
xconfmanager -s wt.pom.dbUser=<WC_db_user> -t "db/db.properties"
xconfmanager -s wt.pom.dbPassword=<WC_db_user_password> -t
"db/db.properties"
xconfmanager -p
f. 启动 Windchill 服务器。
12. 为管理日志考虑以下事宜:
◦ 适当地授予日志文件操作系统权限
◦ 生成日志统计信息,并在生成日志的服务器之外的服务器上执行日志分析。
◦ 监视 web 服务器日志文件的增长情况并调查
▪ 任何异常的增大
▪ HTTP 响应错误的异常编号,如 40x 或 50x
◦ 实施脚本来实时或在设置的时间间隔后检查日志
◦ 仅当对问题进行故障排除时启用生产系统的特定日志记录功能。例如,使用以下步骤将客户端错误日志消息记录到方法服务器日志中:
1. 导航至 > > 。“服务器状况”窗口随即打开。
2. 单击“监控工具”链接。“系统健康监控工具”窗口随即打开。
3. 单击“日志级别”链接。
4. 通过以下设置启用日志记录功能:
▪ 选择“服务器进程”下的“服务器管理器”、“方法服务器”和“Servlet 引擎”。
▪ 在“记录器”字段中输入 wt.log4javascript。
▪ 将日志记录级别设置为“错误”
5. 单击“设置”启用日志记录功能。
故障排除后,将日志记录级别设置为 OFF 来禁用日志记录功能。
◦ 使用监视工具分析日志。有关详细信息,请参阅
使用监控工具。
13. 自定义 Windchill 代码时,请遵守下列安全准则:
◦ 保护创建、更新或删除数据操作免受跨站请求伪造攻击。
◦ 在 SQL 查询中使用准备好的或参数化的语句。这样可防止 SQL 注入攻击。
◦ 考虑来自不可信外部资源的所有数据。如果未对不可信数据进行适当处理,应用程序很容易受到注入攻击。不可信数据的示例包括以下几个:
▪ 最初来自用户或外部系统并存储在 Windchill 数据库中的数据。例如,对象名称、数字或说明。
▪ 来自客户端的数据 (包括请求参数、表单字段、隐藏字段、查询字符串、HTTP 标头以及 URL)。
▪ 最初来自用户或外部系统并存储在 LDAP 中的数据,如用户名。
▪ 存储在任何外部数据库中的数据
◦ 验证所有不可信数据的数据类型、格式和长度是否正确。不可信数据包括表单字段、查询字符串、HTTP 标题、cookie 以及 URL。
◦ 在浏览器 (客户端) 中显示的所有数据上使用基于上下文的适当编码,(如 HTML 编码、JavaScript 编码或 URL 编码),以防止跨站点脚本 (XSS) 攻击。
◦ 确保执行 RemoteAccess 的类未略过访问控制、提升权限或不适当地访问文件系统。
◦ 删除所有未使用的代码。