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

标签 python paypal

我们已经成功地在我们的 Python+pyramid 程序中实现了 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')

那么,如何正确格式化动态加密按钮的输入呢?或者是否有更好的方法在 Website Payments Standard 中实现类似功能来避免此问题,同时又安全?

更新

我们制作的是一个字符串,内容如下

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 页面“登录以完成结帐”显示的项目名称为“Percent%20encoding%20and%20UTF-8:%20%C3%B6”。因此,对于 EWP 输入,百分比编码似乎未被解码。

最佳答案

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

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

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

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

后者假定第一行是正确的,但事实可能并非如此。

关于python - PayPal:如何清理动态创建的加密网站支付按钮的字段值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9506292/

相关文章:

在 Windows 上安装 python 安全更新

python - 根据值列表对字典列表进行排序

javascript - Simplecart 的 paypal 结账货币

javascript - Paypal Embedded Flow 不使用 returnUrl 或 cancelUrl

python - 自定义 Python 包 - django-paypal

python - SWIG:从 Python 调用 Go

python - 使用 Python 3.6 执行 make install 时出现警告

python (Pandas) 根据不同列满足的条件从第 0 列输出值

php - 在 Paypal 交易重定向后隐藏链接的网址,以免被复制以供进一步使用

paypal - 使用 Paypal 标准付款时是否需要先登录沙盒帐户