首页 > 解决方案 > apex_util.prepare_url() 中的校验和是如何计算的?

问题描述

我目前正在审查一个 apex 应用程序,它使用带有“p_checksum_type => 3”的“APEX_UTIL.PREPARE_URL”调用来返回一个带有有效“SESSION”级别校验和参数的 URL。

这种生成的 URL 的一个示例是:

https://localhost/APEX/f?p=PAGE:APP:SESSION::::P1337_AID,P1337_ALID:2,&cs=3qGcLriwAHNz36flGhBsxJewK0yWV38ac1cn4GcwDe3r0TZ3GKLtyKSbgLwTCE_kd6YSSpHwh7HlWL-rrfvy36z

我的问题是如何在内部生成 &cs URL 参数值。在这种情况下,文档不是很有帮助。提前致谢。

顶点版本:21.1.2

prepare_url 的 Apex 文档: https ://docs.oracle.com/database/apex-5.1/AEAPI/PREPARE_URL-Function.htm#AEAPI160

标签: oracleoracle-apexapexapex-code

解决方案


如果你想对他们的校验和算法进行逆向工程,有几个哈希函数需要注意;请参阅《管理指南》中的“3.3.2.1.8 选择校验和哈希函数”部分:

从 Checksum Hash Function 中,选择 Application Express 用来为校验和生成单向哈希字符串的哈希函数。

SHA-2 算法仅在 Oracle Database 12c 或更高版本上受支持。Most Secure自动选择最安全的可用算法。因此,Oracle 推荐此设置。在 Oracle Database 12c 或更高版本上,这评估为 SHA-2,512 位,在 Oracle Database 11g 上,SHA-1 是最安全的算法。由于不推荐使用 MD5 算法,Oracle 不推荐此设置。

3 种不同级别的会话状态保护(应用程序级别、用户级别、会话级别)的描述模糊地提到校验和可以特定于“工作空间和应用程序”、“工作空间、应用程序和用户”或“会话”,分别。

此外,旧版本的文档提到校验和包括隐藏页面项pSalt作为盐。

根据校验和文本中的下划线和破折号,它们可能base64url用于将二进制哈希(SHA-256 为 64 个字节)转换为文本值(SHA-256 为约 87 个字符)。

现在,他们在哪些特定字段上运行校验和?不知道,这才是真正的问题。希望这足以为您指明正确的方向!


推荐阅读