Электронная торговля: можно ли передавать идентификатор заказа через строку запроса? - PullRequest
2 голосов
/ 31 июля 2009

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

Есть мысли по этому поводу? Особенно с точки зрения безопасности.

Большое спасибо.

Ответы [ 4 ]

4 голосов
/ 31 июля 2009

Попытка сделать ваш сервис без гражданства - достойная цель. Является ли наличие идентификаторов заказа в строках запроса "безопасным", однако, зависит от многих вещей. Основные вещи, о которых вам, возможно, придется беспокоиться:

  • пользователи, изменяющие свой идентификатор заказа
  • идентификаторы заказа "просачиваются" третьим лицам
  • идентификаторы заказа, прогнозируемые сторонними организациями

Я говорю «может», потому что то, о чем вам действительно нужно беспокоиться, зависит от деталей вашей системы. Каковы последствия этих событий? В зависимости от деталей вашей системы они могут быть безвредными или очень серьезными.

Самая простая проблема, которую нужно решить - это проблема с утечкой. Используйте HTTPS. Это не только предотвращает «подслушивание», но также предотвращает утечки из-за журналов прокси и заголовков Referer.

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

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

Это всего лишь некоторые идеи. Какие из них применимы к вашей системе, зависят от факторов, которые я упоминал ранее.

2 голосов
/ 31 июля 2009

Передача конфиденциальной информации (например, номеров заказов) в строку запроса, как правило, является плохой идеей по ряду причин:

1) URL-адрес GET передается в виде открытого текста, что означает, что что-либо между клиентом и сервером может считывать и захватывать номер заказа из запроса. Если ваш сервер использует номер заказа для выполнения каких-либо важных действий, это широко открытое приглашение для злоупотреблений.

2) Большинство прокси-серверов и журналов доступа регистрируют веб-адреса, включая запрос GET, что означает, что номер заказа клиента будет храниться в журналах доступа на любом количестве компьютеров (включая ваш сервер). Скорее всего, вы не можете контролировать это поведение, которое ОЧЕНЬ ПЛОХО (ТМ).

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

1 голос
/ 02 августа 2009

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

http://www.duncangunn.me.uk/dasblog/2009/08/01/VerifyingTheIntegrityOfQueryStringParameters.aspx

0 голосов
/ 31 июля 2009

вы должны захватывать заказ в вашей БД. Не рекомендуется передавать его в строке запроса.

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