为什么页面上的时间戳是十六进制的?

时间:2019-03-26 17:21:16

标签: javascript java encoding timestamp browser-cache

我从其他开发人员那里获取了代码以进行检查,因为在与公司联系网站的一种形式上(垃圾邮件通过了), spamfilter 的实现是错误的。

当我查看该代码时,他生成了毫秒,在加载网站时称为时间戳,并将其与发出请求时的时间戳进行了比较。如果差异小于3000,则将其视为机器人并抛出错误。

现在,我知道这不是实现spamfilter的最佳方法,并且存在问题,因为该时间戳已缓存,因此总是超过3秒,但是接下来我要关注的是:

当他在网站加载时生成时间戳时,他将该时间戳转换为十六进制。我不知道他这样做的原因是什么,机器人可以通过某种方式识别常规的隐藏时间戳,还是建议的方式等等?

我想通过js实现时间戳,因此不会在页面上缓存,我想知道它是否必须为十六进制?

这是我的代码:

Javascript:

const encodedTimestamp = Date.now();
document.querySelector("[data-js='contact-form']").setAttribute('data-ets', encodedTimestamp)

Java:

final String timestampString = request.getParameter(PN_SELECTOR);
            //long timestampLong = new BigInteger(timestampString, 16).longValue();
            long timestampLong = Long.parseLong(timestampString);

            Date loadPageTimestamp = new Date(timestampLong);
            Date submitPageTimestamp = new Date();
            long difference = submitPageTimestamp.getTime() - loadPageTimestamp.getTime();

            if (difference < 3000)
            {
                result = true;
            }

注释行来自以前的实现,在那里他将获得十六进制值的时间戳。

最后一个问题将是-在这种情况下使用十六进制时间戳是否有意义,如果可以,为什么?

0 个答案:

没有答案