【问题标题】:Parsing a variable within SQL result解析 SQL 结果中的变量
【发布时间】:2010-10-17 15:41:09
【问题描述】:

我目前正在使用 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。

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

【问题讨论】:

  • 你能解释一下他们得到的输出是什么吗?

标签: php sql variables


【解决方案1】:

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

这是非常狡猾的。 include() 从给定的 URL 中拖入代码并执行它

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

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

如果您只打算返回要在最终页面中显示的 HTML,而不是 PHP 代码,您可以使用 readfile() 或更常用的方法,即让会员插入客户端 标签指向您的网站。

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

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

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

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

目前,您的问题中没有足够的信息来准确诊断您的某些关联公司做错了什么。更具体的例子将是有用的。但从您目前发布的内容来看,我非常担心您的系统最基本的安全性。

【讨论】:

    【解决方案2】:

    抱歉,第二部分应该是:

    <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">
    

    【讨论】:

      【解决方案3】:

      感谢您精心回答bobince。

      我理解你的观点,人们可能不喜欢在他们的页面上包含 php 文件。因此,我删除了第 1 部分并使用重定向 url 和 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] 将不会解析。

      [编辑:由于排名低无法评论]

      【讨论】:

      • 在没有 htmlspecialchars 的情况下存在一个安全问题:想象第三方将用户引导到带有参数“?xyz=">”。该站点将其响应到其 HTML 中,并且是跨站点脚本的受害者。
      • 如果他们尝试将一个嵌入了 PHP 的字符串放入数据库中,我认为可以公平地说他们这样做非常错误,基本上您无法修复它。但是“xyz”通常不应该是静态附属代码吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 2015-06-10
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      • 1970-01-01
      相关资源
      最近更新 更多