Мы успешно реализовали в нашей программе Python + пирамида Encrypted Website Payments для PayPal, за исключением крошечной детали: санация ввода.А именно, мы хотели бы помочь пользователю, предоставив PayPal как можно больше данных из нашей пользовательской базы данных.Теперь мне пришло в голову, что злонамеренный пользователь может изменить свое имя на «Mr Hacker \ nprice = 0.00» или подобное и, таким образом, полностью отрицать безопасность, предлагаемую EWP.Я пробовал URL-кодирование значений, но PayPal, похоже, не расшифровывает экранирование процентов в файле.
Наш код основан на библиотеке django-paypal;библиотека полностью игнорирует эту проблему, выводя счастливые голые пары имя = значение без каких-либо проверок:
plaintext = 'cert_id=%s\n' % CERT_ID
for name, field in self.fields.iteritems():
value = None
if name in self.initial:
value = self.initial[name]
elif field.initial is not None:
value = field.initial
if value is not None:
# @@@ Make this less hackish and put it in the widget.
if name == "return_url":
name = "return"
plaintext += u'%s=%s\n' % (name, value)
plaintext = plaintext.encode('utf-8')
Итак, как правильно отформатировать ввод для динамически зашифрованных кнопок?Или есть лучший способ добиться аналогичной функциональности в стандарте платежей через веб-сайт, чтобы избежать этой проблемы, но при этом быть безопасным?
Обновление
Что мы создаем - строка с содержимым, подобным
item_number=BASIC
p3=1
cmd=_xclick-subscriptions
business=business@business.com
src=1
item_name=Percent%20encoding%20and%20UTF-8:%20%C3%B6
charset=UTF-8
t3=M
a3=10.0
sra=1
cert_id=ABCDEFGHIJKLM
currency_code=EUR
и зашифруйте его для EWP;пользователь отправляет форму на https://www.sandbox.paypal.com/cgi-bin/webscr. Когда пользователь нажимает на кнопку, на странице PayPal «Войдите, чтобы завершить оформление заказа» отображается имя элемента: «Процент% 20encoding% 20 и% 20UTF-8:% 20%C3% B6" .Таким образом, для ввода EWP кажется, что процентное кодирование не декодируется.