【问题标题】:Add realtime time to onclick event为 onclick 事件添加实时时间
【发布时间】:2019-07-20 16:46:47
【问题描述】:

当我点击一个链接时,我想在您点击它的那一刻添加日期/时间戳。时间戳必须在发送前加密。

我找到了一个很好的例子:

  <a href="#" onClick="window.open('/download.cfm?f=#filname#&t=' + (new Date().getTime()));">click me</a>

但我想加密时间戳。所以我尝试了这个,但是现在时间戳不是实时的,而是在页面加载时生成的。

 <a onClick="window.open('/download.cfm?f=#filename#&t=#encrypt(Now(), application.EncryptionKey, "AES/CBC/PKCS5Padding", "HEX")#','_system');" href="##">#filename#</a>

【问题讨论】:

  • 我建议使用 ColdFusion 的 now() 函数将日期和时间标识为 download.cfm 中的第一行代码。
  • 实时到什么?到您的服务器,用户的浏览器,UTC,...?以及为什么需要在发送前加密时间?

标签: jquery coldfusion lucee


【解决方案1】:

一个简单的解决方案是使用 javascript btoa 函数来处理 Base-64 散列,然后使用 atob 函数将其返回为等值的数字。

btoa(new Date().getTime())

将根据您当前的日期/时间返回类似的内容:

"MTU2MzY0MTc2MzA2Mg==" 

使用它来将散列值返回给数字。

atob("MTU2MzY0MTc2MzA2Mg==")

更新:

您可以考虑实施 crypto-js 库以获得更好的加密,但我认为这并不能真正解决不使用不同时间戳更改 url 的问题。根据您的示例查询字符串,更好的方法可能是实现一次性使用密钥。

从 CF 服务器端,生成一个“令牌”键,该键插入到包含活动标志的数据库表(或其他服务器端存储)中,并将令牌值附加到查询字符串中。

/download.cfm?f=#filname#&amp;key=#token#

在您的 download.cfm 文件中,添加将检查令牌密钥的活动状态的逻辑。如果密钥处于活动状态,则将状态翻转为不活动并允许下载,否则禁止下载。

【讨论】:

  • 这是一个简单的解决方案,谢谢!但是当我需要更多的安全性时?这就是我使用密钥(application.EncryptionKey)加密值的原因
  • 您介意扩大您想要达到的安全级别吗?
  • 无法更改 url,以获得不同的时间戳。
  • 如果有人多次单击链接(即右键单击、ctrl+单击等)会发生什么?如果您想提高安全性并使用内容安全策略 (CSP) 规则,它将阻止内联 javascript 工作。您应该考虑添加 javascript 事件侦听器并即时生成加密的 UTC 日期/时间值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多