PayPal: Как санировать значения полей для динамически создаваемых кнопок Зашифрованные платежи через веб-сайт? - PullRequest
6 голосов
/ 01 марта 2012

Мы успешно реализовали в нашей программе 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 кажется, что процентное кодирование не декодируется.

1 Ответ

0 голосов
/ 05 марта 2012

Вы можете отфильтровать пары ключ-значение с помощью регулярных выражений;

>>> import re
>>> text = 'Mr Hacker\nprice=0.00\nsecurity=false'
>>> re.sub('[\n][^\s]+=[^\s]*', '', text)
'Mr Hacker'

Или, что еще проще, отбросить все после первой новой строки;

>>> text.splitlines()[0]
'Mr Hacker'

Последняя предполагает, что первая строка верна, что может быть не так.

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