在SQL结果中解析变量

时间:2009-04-05 11:02:52

标签: php sql variables

我目前正在使用Paypal结帐建立联盟计划(有点像CJ)。当人们注册成为联盟会员(=从他们自己的网站销售自己的产品)时,他们会收到2条必须插入商店的php行。

在标题中:

<?php include 'http://www.mydomain.com/tracker/tracker.php?xyz='.$_GET[xyz]; ?> 

在Paypal按钮中:

<input type="text" name="notify_url" 
    value ="http://www.mydomain.com/ipn.php?xyz=<?php echo $_GET[xyz]; ?>" +
    style="width:1px; height:1px; border:0">

第一部分基本上设置了cookie,而第二部分将返回URL转发给Paypal,这样当有人决定购买时,这会返回给我们。我没有隐藏第二部分,因为我希望能够检查附属公司是否真的添加了代码。

这一切都可以在简单的手工编写PHP中正常工作,但当这些关联企业使用数据库时,这一切都会出错。然后他们的脚本可能会回显类似$ row ['paypal']的内容,它会逐字显示插入的行而不解析$ _GET。

我完全不知道如何解决这个问题。如果可能的话,我想要一些我可以解决的问题,因为我不想惹恼我的附属公司,因为他们主要是非技术人员。

3 个答案:

答案 0 :(得分:1)

  他们收到2条必须插入商店的php行。

这令人难以置信的狡猾。 include()拖动来自给定网址的代码并执行

我永远不会允许联盟网络将PHP代码添加到我的应用程序:这使外部站点可以完全控制我的应用程序和数据库。这对于未加密的HTTP运行尤其不可接受:任何中间人攻击都可能立即危及服务器。此外,如果tracker.php中有跨站点脚本漏洞,任何最终用户都可能完全破坏客户站点。

我强烈建议找一种不太安全的方法来将您的网络与第三方应用程序连接。

如果您只打算返回要在最终页面中显示的HTML而不是PHP代码,您可以使用readfile()或更常用的方法来使联盟会员插入客户端 - side&lt; script&gt;标记指向您的网站。

<?php include 'http://www.mydomain.com/tracker/tracker.php?xyz='.$_GET[xyz]; ?>

您还应该使用urlencode(),以便正确转义参数中的任何网址特殊字符。

value="http://www.mydomain.com/ipn.php?xyz=<?php echo $_GET[xyz]; ?>"

在这里,加上你应该像任何时候输出任何文本内容到HTML一样,使用htmlspecialchars()来编码HTML特殊字符。否则,您很容易受到跨站点脚本攻击。

目前,您的问题中没有足够的信息来准确诊断您的某些关联企业的错误。更具体的例子是有用的。但是从你到目前为止发布的内容来看,我对最基本的系统安全性抱有很大的担忧。

答案 1 :(得分:0)

很抱歉,第二部分应该是:

<input type="text" name="notify_url" value ="http://www.mydomain.com/ipn.php?xyz=<?php echo $_GET[xyz]; ?>" style="width:1px; height:1px; border:0">

答案 2 :(得分:0)

感谢您精心解答的问题。

我理解你的观点,人们可能不喜欢在他们的网页上包含php文件。因此,我删除了第1部分,并使用重定向网址和Cookie更改了它。显然,在真实的脚本中我也可以防止SQL注入。

然而,我的主要问题仍然存在。为了使用Paypal跟踪销售,我需要在网站上的Paypal按钮中添加一个输入字段。这看起来像这样:

<input type="text" name="notify_url" value
="http://www.artinthepicture.com/sellmyart/ipn.php?xyz=<?php echo $_GET['xyz'] ?>" style="width:1px; height:1px; border:0">

没有安全问题,因为没有什么奇怪的事情可以发生。主要问题是用户的代码可能会出现很多问题。例如,如果他们使用mysql数据库来构建他们的商店,他们可能会有一个单独的paypal按钮字段。现在如果他们回显这个paypal按钮,额外的输入字段将看起来与上面完全相同。这是一个问题,因为$ _GET [xyz]不会解析。

[编辑:由于排名较低而无法发表评论]