取决于两个站点的独立程度。如果他们共享对私有内容(数据库或某些文件空间)的访问权限,那么您可以考虑在它们之间传递一个随机值。否则,如果您可以使用 time + salt 方法,仅允许具有相同 salt/算法的人生成有效 URL。
M = 主站点
H = 帮助站点
K = 在它们之间传递的键值(纯文本为很好)
A:服务器时间 + Salt:
XMIT:M 散列时间(四舍五入到最接近的十分钟标记)+ 一些随机值(盐)以生成 K .并将 K 附加到帮助 URL(更好的是帮助请求是 POST,因此 K 对用户不可见)。
RCV:H 使用相同的算法完成相同的哈希,如果它的哈希与提供的 K 匹配,则授予访问权限。否则H会显示一个空白页面(也许出于安全考虑,他们希望网站的详细信息保密?)或错误消息(风险更大,但对合法用户有帮助)。
REQ:同一服务器上的两个站点或服务器上的两个站点在时间上合理同步 - 由于 10 分钟量化,因此无需完美同步。重要的是两台服务器上的盐值相同且不可公开访问(如果第三方发现存在风险,也可以对其进行更新)。
安全:盐永远不会在两个服务器之间传递纯文本,但是因为传递的密钥仅在一段时间内有效,即使有人嗅探该值(或将其从源中复制出来) em>M) 只能暂时获得访问权限。您需要四舍五入到最近的 n 分钟标记以 (a) 为页面访问者提供合理的时间来请求帮助 (b) 因为请求和检查将相隔一小段时间并且 (c ) 因为如果站点位于不同的服务器上,则时间将不相同。安全来自于保持盐和时间计算算法的私密性。
注意:在 H 上,您可能需要测试 K 的两个值,以考虑舍入导致 M 和 H 到不同的时间(因为不同的时间或因为处理延迟)
B:数据库/文件密钥:
XMIT:M 为 K 生成一个随机值并将其和过期时间存储在 的数据库表或文件中H 可以访问。 M 再次将 K (不是超时)附加到 GET 或 POST 请求到 H.
RCV:H 根据存储值列表检查值,如果找到且未超时,则授予访问权限。
REQ:两个站点都可以访问共享文件存储或数据库。数据库表或文件将需要存储多个随机值。 M 或 H 应该清理过期的条目(作为其操作代码的一部分,或者可以设置计划任务 [cron 作业] 以定期完成此操作)
SECURITY:虽然 K 以纯文本形式存在,但知道它并没有任何好处 - 再次,嗅探值或从某个地方将其复制出源代码只会暂时授予对H的访问权限。
总体
根据您对用户点击超时或使用“找到”键的未经授权的来源的容忍程度,您可以使用 AJAX 在单击帮助按钮时生成值,并保持非常低的超时(17 秒?)