【问题标题】:Use PHP to track links使用 PHP 跟踪链接
【发布时间】:2023-04-08 18:10:01
【问题描述】:

我的网站上有各种指向特定表单的链接。

每当有人填写表格时,我都希望能够知道是什么链接将他们引导至表格。

我想这样做,而不必为我在其中创建的每个链接创建单独的 PHP 代码行。相反,我想要一些 PHP 代码从该链接中获取某些内容,并可能将其插入一个隐藏的文本框中,该文本框从我在链接中标记的内容中获取其值或文本。

例如:

  1. 用户点击链接。
  2. 该链接将他们定向到表单。
  3. 链接带有激活 PHP 代码的标识
  4. 当我收到表单时,我知道点击了哪个链接可以访问该表单。

我希望它也适用于我发送的电子邮件中的链接。

【问题讨论】:

标签: php


【解决方案1】:

根据您帖子中的信息,听起来您只是想发送一个令牌/ id。

<a href="form.php?token=xxx">Goto Form</a>

现在您可以在表单上获取令牌:

$token = $_GET['token']; // use proper testing first

然后使用switchif 语句运行您需要的任何代码。

<input type="hidden" value="<?php echo $token; ?>">

补充:

正如//use proper testing first 评论所指出的,您应该确保传递的令牌是有效的,并且在受到攻击的情况下进行了清理。一种选择是在生成令牌时将令牌存储在数据库中,然后在验证时进行比较。还要查看htmlspecialchars() 甚至strip_tags() 进行消毒。

如果令牌验证失败,你不应该输出,甚至应该有一个警告消息/重定向有一个错误。

【讨论】:

  • 请参阅上面有关 XSS 攻击的帖子,您的代码也容易受到攻击。
【解决方案2】:

您可以使用HTTP Referer 来实现此目的。在 PHP 中,您可以使用

$referer = $_SERVER['HTTP_REFERER']

【讨论】:

    【解决方案3】:

    以此为例:

    if (isset($_SERVER['HTTP_REFERER']))
    {
        $ref = $_SERVER['HTTP_REFERER'];
    }
    

    然后在您的表单中类似于:

    <input type="hidden" value="<?php echo htmlspecialchars($ref, ENT_QUOTES); ?>" name="ref" />
    

    【讨论】:

    • 您使用的这个新的hidden 属性是什么?
    • 这很容易受到 XSS 攻击
    • @sorfect 你没有清理数据,只是盲目地输出到表单域。
    • 获取 Post 数据后,您将对所有数据进行检查,而不仅仅是这一项。漏洞就来了。
    • @sorfect 当$_SERVER['HTTP_REFERER'] 等于"&gt;&lt;script&gt;run_some_evil_code();&lt;/script&gt;&lt;x x=" 时会发生什么,代码将在页面上运行并且可以进行各种攻击。所有外部数据都应在输出到浏览器之前进行清理。推荐人是外部数据,可以被篡改。顺便说一句,INPUT 字段没有 hidden HTML 属性这样的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 2015-04-09
    相关资源
    最近更新 更多