我有一个包含以下代码的文件
<a href="http://www.w3schools.com/" target="_blank">
<div class="invicta"></div></a>Lorem ipsum dolor sit amet ...
如果我打开该文件,该链接将完美运行。 但是,在我的index.php中,我有以下代码
<?php
$page = $_GET['page'];
if (!isset($page))
{
include("home.html");
}
if(file_exists($_GET['page'].".php")){
include $_GET['page'].'.php';
}
elseif (isset($page) && !@include("$page"))
{
include ("error.html");
}
?>
因此,当我转到index.php?page=<thenameofthefile>
链接不起作用时,它甚至不会将它们检测为链接。我正在使用铬。有任何想法吗?
我认为这是因为php代码位于一个浮动的容器内,但我不明白为什么会影响链接。如果您需要更多信息,请询问。 谢谢!
编辑: 您可以在此处找到该网站,以便查看源代码: WEBSITE 关于你们有些人对安全性的评论,如何改进呢? 再次感谢!
答案 0 :(得分:0)
首先,您要包含完整的HTML文件。在浏览器中执行“查看来源”,您会在文档正文中找到<html>
,<body>
等 。这导致了各种各样的混乱,并且没有人知道每个浏览器将如何处理它。简而言之:这是错误的。
其次,看看你的例子,我认为你应该阅读W3fools page。花点时间,真正阅读它。时间不长,未来可能会为你带来很多悲伤。
第三,通过访问http://snapi.vv.si/public_html/index.php?page=/etc/passwd
,我收到一条消息,告诉我你的主目录是什么(/home/u460512479
)。之后,我可以使用http://snapi.vv.si/public_html/index.php?page=/home/u460512479/<anything>
从您的主页(不仅仅是网络!)目录中获取内容。你的网络服务器可读的任何内容都可以读取到整个世界,只要它们获得文件名(可以猜到,暴力强制,......)。 从不,永远,信任用户的数据,即通过$_GET
,$_POST
等获得的任何内容
您需要的最低安全性是从$page
中删除所有目录信息,例如使用basename()
。这仍然会打开您的Web目录,但至少保护其他目录。但是,完全控制会更好。例如,可以以这种方式访问的页面数组。
请记住:安全性必须从一开始就正确完成,否则你会发现自己永远在修补和搞乱你的来源。