PayPal: Как очистить значения полей для динамически создаваемых кнопок «Зашифрованные платежи через веб-сайт»?

Мы успешно реализовали в нашей пирамиде 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% 20and% 20UTF-8:% 20% C3% B6». Таким образом, для ввода EWP кажется, что процентное кодирование не декодируется.

6
задан Antti Haapala 2 March 2012 в 11:59
поделиться