PHP页面保护
我在我的网站上销售数字产品,并且我想设置某种页面保护。我的客户通过PayPal付款。我有一个“提交”页面上的链接到PayPal结帐,并已设置我的结帐重定向到“信息”页面。信息页面是我想要保护的内容。PHP页面保护
这里是我到目前为止的代码,但由于某种原因它不工作,我不断收到“其他”的声明......
<div id="info">
<ul>
<li>
<?php
if ($_SERVER['HTTP_REFERER'] == "https://www.paypal.com/"){
echo 'information...';
}else{
echo 'You need to pay first...';
}
?>
</li>
</ul>
</div>
任何人看到我在做什么错?或者有更好的选择?
谢谢!
$_SERVER['HTTP_REFERER']
可以很容易地被任何人伪造。你的安全有多重要?如果没有人付费访问页面是至关重要的,那么不要依靠HTTP_REFERER。
我很长时间没有使用PayPal,但是当我做了它们时,它们有一个用于验证付款的回调URL。数据流应该是这样的
Your Server Paypal User submits payment form <-----------Paypal sends transaction information to your callback url You send the information back-----------------------------------> <---------Paypal sends back confirmation that they sent you that data (The data wasn't faked)
现在您检查交易信息说什么。如果用户进行了付款,则将该记录存储在某种数据库中,以便您可以在将来随时验证付款。
更新
下面是Paypal进行PHP代码示例,让您开始:https://cms.paypal.com/cms_content/US/en_US/files/developer/IPN_PHP_41.txt
该页面变成一个回调/通知页面。您不要将任何代码放在您要保护的页面上。相反,当您在该页面上验证付款后,您会将信息存储在数据库中,然后检查您所保护的页面上是否已验证付款。
如一些人评论说,依靠HTTP_REFERER是远离安全
但是得到你正在尝试做的工作 我会更改您的代码是这样的
这将检测是否引荐包含 “https://www.paypal.com/” 而不是==来
if (strpos($_SERVER['HTTP_REFERER'], "https://www.paypal.com/") !== FALSE)) {
使用PayPal时,有多种方式来处理商品的购买。我会建议与回调的选项。您指定将处理贝宝回调数据的特定网址。在该网址中,您按照PayPal开发文档中所述进行数据验证。在这种情况下,当客户重定向回您的页面时,您所做的是在db中查找以查看购买状态。如果尚未收到回叫数据,请等待并重新检查。一旦您收到贝宝的回拨,并且您明确知道付款是否发生,那么基于此,您应该允许访问您的客户或否。
使用Referrer是不好的,因为许多客户都看到这个东西被禁用。此外,这可以很容易地更改,您的“受保护”区域将更容易访问。
问候, J.
<?
$ref=$_SERVER['HTTP_REFERER'];
if (strpos($ref,'https://paypal.com') !== false) {
echo 'ok';
}else{
echo 'error';
}
?>
您的方法可能会回答这个问题,但您应该解释为什么以及如何解决提问者面临的问题。 – jxh
“任何人都看到我在做什么错了?”您依赖用户控制的$ _SERVER ['HTTP_REFERER']。发送虚假推荐人是微不足道的。 – ceejayoz
因为引用者本身不是'https:// www.paypal.com /',而是包含在'www.paypal.com'主机中的页面。尝试解析URL并检查主机。 – Ben
你想保护什么?您是否希望仅向已付费的人展示内容? –