【问题标题】:Appending GET parameters to URL from <form> action从 <form> 操作将 GET 参数附加到 URL
【发布时间】:2012-01-18 13:57:58
【问题描述】:

假设我目前在我当前的网络构建中使用 index.php 或 index.php?p=about。

我正在尝试构建将在大多数页面上显示的搜索表单,但我希望表单操作转到 http://mywebsiteurl.com/?p=search&q=GETDATA,因为我的网站的分页取决于传递给“p”属性的数据。

如何在提交时以静态方式将搜索参数附加到 URL?

【问题讨论】:

    标签: php forms search parameters get


    【解决方案1】:

    大概是这样的:

      <form method="get" action="index.php">
         <input type="hidden" name="p" value="search" />
         <input type="text" name="q" value="" />
         <input type="submit" value="search" />
      </form>
    

    【讨论】:

      【解决方案2】:

      您可以在表单中使用隐藏字段来维护p 参数的值:

      <input type="hidden" 
             name="p" 
             value="<?= htmlentities($_GET['p'], ENT_QUOTES) ?>" />
      

      【讨论】:

      • 好评。将示例代码更改为使用 _GET。在实践中,我认为 p 的值很可能是由应用程序编写的,而不是盲目复制。
      • 它仍然容易受到攻击,您应该使用&lt;input type="hidden" name="p" value="&lt;?= htmlentities($_GET['p'],ENT_QUOTES); ?&gt;" /&gt; 看看acunetix.com/websitesecurity/cross-site-scripting.htm
      • 感谢您的建议(和文章)。相应地修复了代码示例。
      【解决方案3】:

      您应该将参数p 的值放在搜索表单内的隐藏表单字段中;类似:

      <input type="hidden"
          name="p"
          value="<?php echo(htmlspecialchars($_REQUEST["p"])); ?>" />
      

      将参数放到表单动作参数中不是一个好主意; post 请求的处理方式与 GET 请求不同,POST 请求中的值不会附加到 URL 中?和 & 与 GET 一样;这意味着您实际上不会将 p 参数放入处理来自表单的 POST 请求的脚本中......

      还要注意不要显示未反映的请求参数(因此是 htmlspecialchars,感谢您的提示!),因为恶意客户端可能会尝试将代码注入您的页面 (HTML injection / XSS)。

      【讨论】:

      • @Lawrence Cherone:你说得对,我会立即纠正,谢谢提示!
      • 谁能简要解释一下 XSS 漏洞?我会根据我的情况进一步研究它
      • 当您显示未反射的参数时,它通常容易受到 XSS 攻击,就像它们来自客户端一样;这样他们可能会将 HTML 代码注入您的网站。
      • 所以搜索表单只会导致 p=search,它可以是静态的:
      • 如果p的值不变,为什么还要传输呢?
      猜你喜欢
      • 2019-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-22
      • 2014-09-08
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      相关资源
      最近更新 更多