Передача конфиденциальных и коротких данных на внешние ссылки - PullRequest
0 голосов
/ 21 февраля 2019

Недавно я хотел начать внедрять API на своем веб-сайте, но я столкнулся с некоторыми проблемами, связанными с проверками, из-за недостатка знаний о том, как правильно отправлять данные JSON с помощью Ruby on Rails.В прошлом я работал с некоторыми API-интерфейсами и JSON, но впервые я сделал это одновременно, и мой опыт работы с RoR по-прежнему отсутствует.

Моим первым инстинктом было просто объединить параметры в URL и, увидев более положительный (хотя все еще неполный) ответ JSON от API, я подумал, что на правильном пути, но после неудачной попытки получитьуспешный ответ Я начал копаться в том, что я отправлял, именно тогда я заметил две проблемы.

Первая проблема заключалась в том, что внутри URL была конфиденциальная информация, такая как мой clientID, информация о покупке, такая как цена и описание,вместе с секретным ключом, зашифрованным с помощью MD5 и небольшим количеством соли для шифрования, но согласно документации это безопасно и просто для сравнения с полученной от сервера информацией, так что в целом я не слишком беспокоился о компрометации такой информации.Тем не менее я хотел улучшить свой код и защитить как можно больше информации.

Моя вторая проблема была более существенной, я заметил, что передаваемая информация была неполной из-за ограниченного пространства в параметрах URL.

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

Затем я обнаружил, что помощник link_to можетотправить параметры, но после некоторого тестирования это не сработало, и затем я обнаружил, что для отправки параметров на внешние сайты с рельсами, предложенный метод состоял в том, чтобы объединить параметры в URL, поэтому я вернулся на полный цикл.

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

Хотя я работал с обоимиAPI и JSON раньше, они все еще являются предметами. Мне пока не очень удобно с ними работать, и в какой-то степени я все еще многому учусь в RoR.

Это был код (настоящий выглядит немногодругой) который дал мне больше всего результатов:

Мой контроллер order_controller.rb

def confirm_order

  #Here I group all the parameters I'll need

  @payment_params = []
  description = "create_"+ @order.name.gsub(' ','_')
  device_info = "WEB"
  currency = @order.currency
  fee =  @order.price
  #this was to concatenate the url, previouly I had the name of each parameter and the "&" taken into account, the response was different as I added each.
  @payment_params << description << device_info << currency << fee
end

И, на мой взгляд, verify_order.html.erb что-то вроде

<a href= <%="https://payexample/something/order?"+ @payment_params%> >Confirm order</a>

Любое понимание приветствуется, но сейчас я действительно не знаю, как вообще подойти к вопросу, поскольку я исчерпал все, что я выучил.

1 Ответ

0 голосов
/ 21 февраля 2019

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

Я не уверен, как вы отслеживаете порядок, будь то в базе данных или сеансе или что.Поэтому вам, возможно, придется немного изменить это, чтобы пропустить нужные параметры.

https://apidock.com/rails/ActionView/Helpers/UrlHelper/button_to

<%= button_to('Confirm order', action: 'confirm_order') %>

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

def confirm_order
  #Here I group all the parameters I'll need

  @payment_params = []
  description = "create_"+ @order.name.gsub(' ','_')
  device_info = "WEB"
  currency = @order.currency
  fee =  @order.price
  #this was to concatenate the url, previouly I had the name of each parameter and the "&" taken into account, the response was different as I added each.
  @payment_params << description << device_info << currency << fee

  redirect_to("https://payexample/something/order?#{@payment_params}")
end

Я не совсем уверен, что вы хотите, чтобы этот URL перенаправления был.Это зависит от внешнего сайта.Если вам нужны параметры строки запроса, вы можете создать хеш ключей и значений и использовать метод to_query, чтобы превратить его в строку запроса.

https://apidock.com/rails/Hash/to_query

...