包含文档时,超链接不起作用

时间:2013-07-06 09:34:37

标签: php html hyperlink include

我有一个包含以下代码的文件

<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 关于你们有些人对安全性的评论,如何改进呢? 再次感谢!

1 个答案:

答案 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目录,但至少保护其他目录。但是,完全控制会更好。例如,可以以这种方式访问​​的页面数组。

请记住:安全性必须从一开始就正确完成,否则你会发现自己永远在修补和搞乱你的来源。