PayPal:如何清理动态创建的加密网站付款按钮的字段值?

时间:2012-02-29 20:41:36

标签: python paypal

我们已经成功实施了我们的Python +金字塔程序PayPal的加密网站付款,除了一个小细节:输入清理。也就是说,我们希望通过从用户数据库向PayPal提供尽可能多的数据来帮助用户。现在,我突然想到恶意用户可以将他的名字改为' 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 :(得分:0)

您可以使用正则表达式过滤出键值对;

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

或者甚至更简单,在第一个换行符后丢弃所有内容;

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

后者假定第一行是正确的,可能不是这种情况。

相关问题