嘿,我想问你一个特定的脚本,这里是:
我理解了一切,结构非常好,我非常喜欢它,我看起来也非常安全,但我有一个关于这个问题的问题 -
} else {
// PayPal payment is valid
// Process order here
}
我该怎么办?在数据库中插入值?但这是在之前完成的?! :
} else {
// Transaction not processed, store it in the database
$payer_email = mysql_real_escape_string($_POST[‘payer_email’]);
$gross = mysql_real_escape_string($_POST[‘mc_gross’]);
问候!
编辑:好的,我可以用这个防止重播攻击吗? : if($f[‘count’] > 0) {
$errors[] = “Transaction already processed”;
} else {
if (count($errors) > 0) {
// IPN data is incorrect - possible fraud
// It is a good practice to send the transaction details to your e-mail and investigate manually
$message = "IPN failed fraud checks";
mail(‘youremail@example.com’, 'IPN Fraud Warning', $message, $headers);
} else {
// Transaction not processed, store it in the database
$payer_email = mysql_real_escape_string($_POST[‘payer_email’]);
$gross = mysql_real_escape_string($_POST[‘mc_gross’]);
$insert = mysql_query(“INSERT INTO transactions (txt_id, payer_email, mc_gross) VALUES
(‘$txt_id’,’$payer_email’,’$mc_gross’)”);
}
}
你怎么看待这个?
答案 0 :(得分:0)
以上代码是:
if (!$fp) {
// HTTP ERROR
} else {
您必须将所有内容放在else中,因为如果$fp
为false,则表示无法建立与Paypal的IPN验证系统的连接。
通过后,我们可以看到其他内部有支票,还会检查付款(由PayPal考虑)是否确实有效:
if (strcmp ($res, "VERIFIED") == 0) {
// PAYMENT VALID
}
IPN的想法就是这样,当用户关注html按钮代码时,它会将它们链接到paypal的网站上。
通常有一个隐藏的价值(或者如果您使用的是托管按钮,它会保存在PayPal的网站上),PayPal会回复说付款已经完成。
确保客户端和服务器安全性的下一步是仔细检查 ping 是否来自Paypal。因此,您获得了之前下载的SSL证书,并通过https连接到Paypal进行检查。
以下代码显示了有效内容:if (count($errors) > 0) {
else
与此相关联。
我该怎么办?在数据库中插入值?但这是在之前完成的?! :
您处理信息。例如,如果用户购买了您网站的会员资格,您可以将他们的用户设置为数据库中的升级状态。
付款已记录在数据库中,这会阻止replay attack。
重播攻击
我认为您已使用$errors[] = "Transaction already processed";
如果查看上面的代码,可以看到脚本在数据库中查询过去的事务。如果id匹配任何行,则认为它无效。所以不行。只要你有这些检查,就不可能进行重播攻击。