我正在编写一个 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!";
}
Run Code Online (Sandbox Code Playgroud)
我想知道更安全的代码哪个更好:
$_SERVER['PHP_SELF']?id=test或test.php?id=test。
我知道它现在具有相同的目的,但如果我更改文件名$_SERVER['PHP_SELF']?id=test似乎更好,因为它仍然指向同一个文件。
但我想确切地知道哪个更安全。
你不应该打印$_SERVER['PHP_SELF'];这是一个安全漏洞(这里有一个示例:如何识别 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>Run Code Online (Sandbox Code Playgroud)
不以 a/或协议(如http://)开头的链接是相对于当前文档的位置的。以 a 开头的链接/是相对于域根的。该行为由W3C规定。
从广义上讲,您是对的,您应该避免将文件名之类的内容硬编码到文件中。但您通常也不需要使用数据来$_SERVER构建链接。