Php 如果包含can',如何回显错误消息;我找不到文件

Php 如果包含can',如何回显错误消息;我找不到文件,php,Php,我使用一个php脚本包含另一个php文件。当有人使用错误的字符串访问index.php时,我希望它在屏幕上显示一条错误消息 如何使其显示自定义错误消息,如“您使用了错误的链接,请重试。” 这就是我现在正在做的 有人像这样访问URL http://example.com/?p=14 这将把他们带到index.php文件,它将拾取p。然后在index.php脚本中使用include('p'.$p./index.php')查找目录p14,并在该目录中包含index.php文件 我发现,不管出于什么

我使用一个php脚本包含另一个php文件。当有人使用错误的字符串访问index.php时,我希望它在屏幕上显示一条错误消息

如何使其显示自定义错误消息,如“您使用了错误的链接,请重试。”

这就是我现在正在做的

有人像这样访问URL

 http://example.com/?p=14
这将把他们带到
index.php
文件,它将拾取
p
。然后在
index.php
脚本中使用
include('p'.$p./index.php')
查找目录
p14
,并在该目录中包含
index.php
文件

我发现,不管出于什么原因,人们都在改变
p=
,使它成为一个非目录的东西。我想与之抗争,如果他们在里面放了其他东西,我只想指出一个错误。我有太多的目录,将添加更多,所以我不能只给我们一个简单的
如果($p!='14'){echo“error”;}
我将不得不做45个

那么,对我来说,什么是一个简单的说法。。。。如果包含不起作用,则回显“错误”;“

解决方案1:

if(!@include($filename)) throw new Exception("Failed to include ".$filename);
解决方案2:使用文件\ u exists-这检查文件或目录是否存在,因此您也可以检查目录

if (!file_exists($filename)) {
    echo "The file $filename does not exist";
}
解决方案1:

if(!@include($filename)) throw new Exception("Failed to include ".$filename);
解决方案2:使用文件\ u exists-这检查文件或目录是否存在,因此您也可以检查目录

if (!file_exists($filename)) {
    echo "The file $filename does not exist";
}

您不应该使用此包含解决方案,因为它可能容易受到攻击

即使使用file_exists也不是一个好的解决方案,因为攻击者可以在服务器中尝试一些未正确保护的文件,并获得对它们的访问权限

您应该使用白名单:一个字典,其中包含用户可以通过别名引用的文件,如下所示:

$whiteList = array(
    "page1" => "/dir1/file1.php",
    "page2" => "/dirabc/filexyz.php"
)
if (array_key_exists($p, $whiteList)) {
    include_once($whiteList[$p]);
} else {
    die("wrong file");
}
通过这种方式,您不会向web公开服务器文件结构,并保证只能包含您允许的文件

在使用
$p
之前,必须对其进行消毒:

$p = filter_input(INPUT_GET, "p", FILTER_SANITIZE_STRING);

但是根据您在字典中使用的键,应该使用其他筛选器。。。查看。

您不应该使用此包含解决方案,因为它可能容易受到攻击

即使使用file_exists也不是一个好的解决方案,因为攻击者可以在服务器中尝试一些未正确保护的文件,并获得对它们的访问权限

您应该使用白名单:一个字典,其中包含用户可以通过别名引用的文件,如下所示:

$whiteList = array(
    "page1" => "/dir1/file1.php",
    "page2" => "/dirabc/filexyz.php"
)
if (array_key_exists($p, $whiteList)) {
    include_once($whiteList[$p]);
} else {
    die("wrong file");
}
通过这种方式,您不会向web公开服务器文件结构,并保证只能包含您允许的文件

在使用
$p
之前,必须对其进行消毒:

$p = filter_input(INPUT_GET, "p", FILTER_SANITIZE_STRING);

但是根据您在字典中使用的键,应该使用其他筛选器。。。查看。

您可以先打电话,然后再尝试将其包括在内。如果不存在,则显示错误。您还应清理/过滤
$p
,使其不能包含
或其他潜在危险的输入。您可以在尝试包含它之前调用。如果不存在,则显示错误。您还应该清理/过滤
$p
,这样它就不会包含
或其他潜在危险的输入。谢谢。我从来不知道自己会被黑客攻击。尽管我不得不在白名单上添加一些页面,但我认为这对我来说是最好的选择。非常感谢您的帮助和信息,解释了应该做什么和不应该做什么。我很高兴能帮助您!谢谢非常感谢。我从来不知道自己会被黑客攻击。尽管我不得不在白名单上添加一些页面,但我认为这对我来说是最好的选择。非常感谢您的帮助和信息,解释了应该做什么和不应该做什么。我很高兴能帮助您!谢谢