php如果包含_get else则显示错误

时间:2017-08-16 20:54:33

标签: php

我在PHP上有点新手...所以我想做的是使用以下代码获取页面

<?php include $_GET['topic']; ?> 

获取此类网址http://ulixtxteditor.org/entities/helpCentre?topic=credits 这对我很有用,但是如果没有找到页面我想使用else语句来显示错误而不是空白页面。我该怎么办?例如:http://ulixtxteditor.org/entities/helpCentre?topic=所以这部分会显示错误吗?

<?php if(isset){include $_GET['topic'];} else {echo "error"} ?>

我尝试了这个,但它不会工作。

3 个答案:

答案 0 :(得分:2)

使用类似的东西:

<?php
// In case topic parameter wasn't provided you will have fallback.
$topic = isset($_GET['topic']) ? $_GET['topic'] : '';
// Now you can check topic and have valid file name.
switch ($topic) {
    case 'credits':
        $fileName = 'credits.php';
        break;
    default:
        $fileName = 'index.php';
        break;
}
// Now it is possible safely include file.
include __DIR__ . DIRECTORY_SEPARATOR . $fileName;

直接在$_GET['topic']include构建中使用require是不安全的,因为您容易受到“目录遍历攻击”的攻击。此外,您始终必须验证输入参数的目的,避免包含在php脚本css文件等...

答案 1 :(得分:2)

<?php include $_GET['topic']; ?> 

不要这样做。它会造成一个庞大且容易被利用的安全漏洞。

例如:

  • ?topic=index.php - 创建无限循环

  • ?topic=/etc/passwd - 显示来自服务器的敏感数据

  • ?topic=/proc/self/environ - 执行流程环境中的代码。这通常包括用户控制的数据,如HTTP标头的值,允许远程执行代码。

如果您实施此网站,被利用。有许多机器人扫描公共网站是否存在此漏洞,其中许多将尝试在检测时自动利用它。

如果要根据GET变量的值包含文件,请使用switch($_GET['topic')定义该变量的可接受值。这也允许您将错误处理实现为default:子句。

答案 2 :(得分:0)

这是实现简单接线盒/路由器的一种相当常见的方式。使用switch语句。

$topic = isset($_GET['topic']) ? $_GET['topic'] : '';
switch ($page) {
    case 'credit':
    case 'otherpage':
    case 'otherpage2':
      require_once(dirname(__FILE__) . '/' . $page . '.php');
      break;
    default
      require_once(dirname(__FILE__) . '/' . 'default.php');    
}

您通过在每个顶部添加一个案例陈述将您的页面/主题列入白名单,并且通过加载默认页面来处理任何不匹配或有页面的内容。

在此示例中,我假设所有主题页都与此脚本位于同一目录中(通常名为index.php)。