Хэш URLSearchParams для предотвращения манипуляций - PullRequest
0 голосов
/ 26 июня 2018

Интересно знать, защитить параметры получения моей ссылки в электронном письме от манипуляций .Этот код будет работать на стороне сервера для генерации URL для электронной почты:

    const url = new URL('https://e.dev.example.com')
    
    url.search = new URLSearchParams({
      url: 'https://dev.case.example.com/case/61914',
      user: 21,
      medium: 'email',
      id: 'foobar-123'
    })
    
    console.log(url.toString())

Есть ли какое-либо хорошее существующее решение для сортировки параметров (т.е. сделать их каноническими) или их инкапсуляции, хэширования содержимого и добавления этого (короткого) хеша для проверкиполезная нагрузка позже?

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Если вы создадите ссылку в Javascript, как описано выше, вы не сможете предотвратить манипуляции, потому что для Javascript доступно все, что нужно для создания ссылки, т.е.Пользователь.В этом случае ваш пользователь может создать ссылку с произвольными параметрами и просто создать для нее хеш, такой же, как ваш Javascript.

Если вы создаете ссылку на стороне сервера, это другая история.Затем вы можете канонизировать представление параметров (например, расположить их в алфавитном порядке, что, вероятно, будет самым простым) и добавить MAC (код аутентификации сообщения) на основе секретности на стороне сервера для обеспечения подлинности.Один хороший алгоритм для этой цели - HMAC.Таким образом, когда параметры снова отправляются на сервер, вы можете проверить (опять же на основании секрета), что не было взлома.

Если вы также хотите скрыть параметры, вы можете использовать аутентификацию шифрование .

Также имейте в виду, что выполнение этого будет открытым для атак воспроизведения, т.е.кто-то, имеющий ссылку в одно время, может использовать ее в любое время позже, если не установлена ​​какая-либо защита (одноразовый номер или временная метка).

И снова, вы не можете сделать это только на стороне клиента, ссылки необходимыгенерируется на сервере на основе какого-либо механизма аутентификации сообщений и секрета на стороне сервера.

0 голосов
/ 26 июня 2018

Я не думаю, что существует какое-либо стандартизированное решение для того же.Предполагается, что все сводится к безопасности (предотвращение манипуляций) и рабочей нагрузке (сложность скорости обработки) для хеширования.И то, и другое, как правило, является компромиссом, и вы хотели бы принять решение, с которым нужно идти на компромисс.

Что касается обобщенного способа отправки параметров, я думаю, что JSON является наиболее широко распространенным и простым в обращении форматом в настоящее время.дней.Сериализация JSON-объекта с последующим хешированием будет хорошим способом отправки дня по URL.

Пожалуйста, обратитесь по этой ссылке, чтобы узнать больше об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...