我正在使用PHP和MySQL设计一个订单网站。在最后阶段,用户将获得Paypal按钮以支付他所下的订单。因此,商品名称和价值是变量。
这些变量的存在导致我不能使用来自Paypal的加密按钮。我必须使用非加密按钮或在向用户显示之前加密它。
出于安全原因,我希望对其进行加密。我想知道如何在我的服务器上进行加密。
您需要做的事情相当复杂,首先介绍一下,PayPal加密按钮具有以下布局:
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIIEQYJKo...Encrypted stuff...IF5ioje8JH0LAA+5U7P+tabAMOL37k=-----END PKCS7-----">
<input type="image" src="https://www.paypalobjects.com/es_XC/MX/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal, la forma más segura y rápida de pagar en línea.">
<img alt="" border="0" src="https://www.paypalobjects.com/es_XC/i/scr/pixel.gif" width="1" height="1">
</form>
cmd字段指示加密的“立即购买”按钮(请检查要创建的按钮的值),而encrypted字段是以下布局中按钮的实际内容:
cert_id=ZQCMJTZS27U4F
cmd=_xclick
business=contact@mybiz.com
item_name=Handheld Computer
item_number=1234
custom=sc-id-789
amount=500.00
currency_code=USD
tax=41.25
shipping=20.00
no_note=1
cancel_return=http://www.company.com/cancel.htm
注意,以下内容采用的是键值对格式,并且为了完整的参考请查看此处:https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_Appx_websitestandard_htmlvariables。从你的帖子中,你似乎对加密的含义和使用场景非常困惑。威胁模型是什么?(即它如何被破坏)。
你绝不能期望Paypal会始终处理你发送给客户浏览器的订单。你必须检查Paypal已经处理了什么。
订单离开你的站点后,你可以更好地确保其完整性,例如通过在发送给Paypal的订单号(和盐!)中添加订单的哈希值。这应该允许你验证订单,而不需要参考PLU/存储订单(只要处理来自paypal的返回的脚本知道盐值)。
我开发了一个PHP集成工具包,用于PayPal网站支付标准。
这里提到的所有问题都由辅助类处理。一些基本配置提供了简单的设置。例如,所有加密变量(您的私钥、公共证书等)都可以进行配置。本文详细介绍了如何使用这些类。
PS:只有IPN确认由辅助类实现。
你唯一能够做到这一点的方法是每次动态查询 PayPal 来加密按钮。
然而,这种方法并不高效,我认为最好使用 PayPal IPN。网上有许多关于如何使用它的示例和类。
任何人都可以使用您的PayPal电子邮件地址向您发送虚假发票,要求错误价格的产品名称吗?如果他们要费心更改您的js / html代码以向您发送虚假发票...他们可以编写自己的(只需提交表单到'paypal.com/cgi-bin/webscr')。您真正需要的只是卖家的PayPal电子邮件,对吧?
那么为什么要费心加密按钮呢?