我从其他开发人员那里获取了代码以进行检查,因为在与公司联系网站的一种形式上(垃圾邮件通过了), 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;
}
注释行来自以前的实现,在那里他将获得十六进制值的时间戳。
最后一个问题将是-在这种情况下使用十六进制时间戳是否有意义,如果可以,为什么?