Как я могу проверить секрет, отправленный на сервер? - PullRequest
0 голосов
/ 07 апреля 2011

Я не помню, как я делал это раньше, но я сделал это, и мне было интересно, может ли кто-нибудь мне помочь.

Я отправляю данные на другую страницу, используя запрос GET с некоторыми параметрами в URL.Я хочу проверить параметр на принимающей стороне.В прошлый раз я сделал это, добавив секрет и затем хэшируя его, но теперь я не могу вспомнить, как.

Ответы [ 3 ]

2 голосов
/ 07 апреля 2011

Если вы проверяете, получены ли параметры из источника, из которого вы собираетесь их получать, т.е. я получаю параметры, только если пользователи пришли с page1.php. Вот что вы делаете

  1. Пользователь переходит на page1.php, токен генерируется и помещается в его $ _SESSION. Хешированный токен добавляется в форму на page1.php (или по ссылке, или как угодно)
  2. Пользователь отправляет параметры на страницу 2.php.
  3. Вы проверяете, существует ли хеш и если токен в $ _SESSION, при хешировании, равен токену, отправленному пользователем

Помните, что в этом случае вы проверяете, только если параметры отправлены известным источником. Всегда проверяйте ввод, чтобы проверить, являются ли полученные значения приемлемыми!

0 голосов
/ 07 апреля 2011

Как видите, никто не делает такие "проверки".

На самом деле, данные не отправляются на другую страницу через URL.Просто не имеет смысла отправлять некоторые данные на сервер, где они уже существуют.

Вы неправильно указали строку запроса.Он не отправляет никаких данных, он просто идентифицирует некоторую страницу.

Адрес всей страницы, являющийся URL-адресом, уникальный адрес страницы.

Если на вашем сервере есть страница, отвечающая на какой-либо URL-адрес, такая печать не требуется.

Вместо такого хеширования вы должны проверить свои параметры.

0 голосов
/ 07 апреля 2011

Что вы можете сделать, это добавить (вы уже сказали) хэш значений GET.Преимущество этого подхода состоит в том, что ссылка (если она будет опубликована) является «полной» в том смысле, что вы не полагаетесь на другие данные через активный сеанс и тому подобное.Другими словами, ссылка поставляется с собственной информацией для проверки.

Я бы сделал это так:

Рассчитать хеш

  1. Сортировать массив ключей и значений GET (поскольку порядок параметров следует игнорировать, например, ?a=1&b=2 дает тот же хеш, что и ?b=2&a=1)
  2. Вычислить хэш измассив с добавлением фиксированной соли , то есть hashFunc(concat(GETArray, fixedSalt))
  3. Добавьте hash из (2) к параметрам GET.

Проверка значений

  1. Извлечение параметра hash и сортировка массива оставшихся из GET ключей и значений
  2. Расчет хеша дляотсортированный массив из (1) - та же процедура, что и (2) в приведенном выше списке
  3. Убедитесь, что вычисленное хеш-значение соответствует значениям из параметра GET.

фиксированная соль используется, чтобы убедиться, что знающий человек не может «угадать» ваш алгоритм хеширования и, таким образом, подделать данные (unleКонечно, он также знает фиксированную соль :)).


Пример: a=1, b=2

  • Сортированный массив:array('a' => 1, 'b' => 2);
  • Хеш: xyz (через hashFunc() на concat из sortedArray и 'mySa1t')
  • GET params: ?a=1&b=2&hash=xyz, см. http_build_query()
  • ...
  • Хеш: xyz, оставшийся массив GET, отсортированный: array('a' => 1, 'b' => 2);
  • Расчетный хеш: xyz (через hashFunc()в конкатах srecievedSortedArray и 'mySa1t')
  • xyz == xyz, yaj!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...