【问题标题】:How to link to the current PHP file如何链接到当前的 PHP 文件
【发布时间】:2015-06-30 13:59:09
【问题描述】:

我正在编写一个 PHP 文件,但我不知道创建链接的最佳方法是什么,因为链接在同一个文件中但 ID 不同。我的意思是,我有一个名为 test.php 的文件,其中包含以下内容:

if ($id == "") {
    echo "<a href='".$_SERVER['PHP_SELF']."?id=test'>Try the test page</a>";
} else if ($id == "test") {
    echo "Here is the testing content with various information!";
}

我想知道更安全的代码更适合什么: $_SERVER['PHP_SELF']?id=testtest.php?id=test

我知道它现在有同样的用途,但如果我更改文件名 $_SERVER['PHP_SELF']?id=test 似乎更好,因为它仍然指向同一个文件。

但我想确定哪个更安全。

【问题讨论】:

  • 如果你想链接到当前页面,为什么不直接使用?id=test(没有任何页面)?
  • 回显 $_SERVER[*] 受 XSS(跨站点脚本)的影响。但是,您可以对其进行编码以防止这种情况发生。

标签: php hyperlink


【解决方案1】:

你不应该打印$_SERVER['PHP_SELF'];这是一个安全漏洞(这里有一个示例:How To Identify The Requested Page In PHP)。

如果您尝试链接到同一页面,但使用查询参数 (?) 或锚点 (#),您可以直接链接到它们,正如 @kingkero 建议的那样。

<!--
  The code snippet runs as an iframe from http://stacksnippets.net/js, 
  so that's the root of the links you'll see if you click "Run".
-->
<a href="">Link to current page</a><br />
<a href="?id=test">Add query param to current page</a><br />
<a href="#anchor">Add anchor tag to current page</a>

不以/ 或协议(如http://)开头的链接相对于当前文档的位置。以/ 开头的链接相对于域根。该行为由W3C 列出。

一般来说,您是对的,您应该避免将文件名等硬编码到文件中。但是您通常也不需要使用$_SERVER 中的数据来构建链接。

【讨论】:

  • 那么,更简单的使用方式就是?id=test没有相同的文件名,我对吗?
  • 没错。您可以自己尝试,只需创建一个纯 HTML 文件并像我的示例一样创建一个链接。在浏览器中打开文件,您会看到单击链接添加了查询参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
  • 2012-02-01
  • 2019-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多