Как проверить, что параметр URL не был подделан?

1

Представьте, что у меня есть веб-страница, реализованная на Java, которая доступна по адресу http://mycompany.com/page1.xhtml?trafficSource=someTrafficSourceIdentifier&checkSum=...

Я хочу отслеживать, сколько посещений страниц генерируется разными источниками трафика (например, различные рекламные кампании). Для этой цели у меня есть параметр trafficSource. Набор идентификаторов источника трафика ограничен 5 возможными значениями (например, Google organic, Google AdWords, YouTube, Facebook, Twitter).

Представьте себе, я хочу убедиться, что trafficSource не был подделан (никто не разместил там другое значение). С этой целью я checkSum параметр checkSum.

checkSum = f(X) простой способ создать контрольную сумму для строки X (checkSum = f(X)), так что разные входные строки преобразуются в разные контрольные суммы?

Целью этой меры является базовая проверка моих параметров.

Я попытался использовать следующее, но он создает массив байтов с не буквенно-цифровыми символами, которые я не могу поместить в URL.

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class CheckSumGenerator {
    public String calculateCheckSum(final String aInput) throws NoSuchAlgorithmException {
        final MessageDigest md = MessageDigest.getInstance("SHA");

        final byte[] checkSumBytes = md.digest(aInput.getBytes());

        final String result = new String(checkSumBytes);

        return result;
    }
}
  • 0
    Если проблема заключается в размещении значения, отличного от одного из этих 5, было бы быстрее просто выполнить сравнение строк. Если проблема заключается в том, что люди притворяются, с какого сайта они пришли, проблема невозможна, потому что они могут просто скопировать контрольную сумму с любого сайта, на котором они изображают себя.
  • 0
    Не могу ли я создать ключ (который только я знаю), а затем создать контрольные суммы для каждой из допустимых строк с этим ключом? Затем, когда кто-то trafficSource параметр trafficSource , он или она не сможет сгенерировать правильную checkSum потому что только у меня есть ключ. Есть ли простые способы сделать это?
Показать ещё 3 комментария
Теги:
checksum

1 ответ

1
Лучший ответ

Вы можете получить реферер на стороне сервера из заголовка http-запроса, который не отображается пользователю. Это может идентифицировать посетителей, поступающих с youtube или facebook.

Чтобы решить вашу проблему преобразования хэша в буквенно-цифровую строку, вы можете преобразовать полученные байты в шестнадцатеричный код.

final String result = DatatypeConverter.printHexBinary(checkSumBytes);
  • 0
    Даже это потенциально может быть подделано, но это все же намного лучше, чем передача простых строковых значений.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню