Я получил код от другого разработчика, чтобы проверить, потому что реализация spamfilter была неправильной в одной из форм для связи с компанией на сайте (спам-сообщения прошли).
Когда я посмотрелв этом коде он генерировал миллисекунды, здесь называемые timestamp , когда сайт загружался, и сравнивал его с меткой времени, когда был сделан запрос.Если эта разница меньше 3000, то она считается ботом и выдает ошибку.
Теперь я знаю, что это не лучший способ реализации спам-фильтра, и возникла проблемапотому что эта метка времени была кэширована, поэтому она всегда будет больше 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;
}
Закомментированная строка из предыдущей реализации, где он получит метку времени в шестнадцатеричном значении.
Итак, будет заключительный вопрос : имеет ли это смыслс шестнадцатеричной меткой времени в этой ситуации, и если да, то почему?