如何从PHP

时间:2017-06-19 02:16:47

标签: php apache apache2 ubuntu-14.04

我环顾四周,并没有发现任何关于我需要的问题。

我想制作类似“admin.php”的内容,但如果条件不正确,我想将它返回404。但是,与404页面的其余部分看起来不同的404将向攻击者暗示“admin.php”是真实文件。

我不想制作自己的自定义404页面,我认为Apache的默认404对我来说已经足够了。如何发送404触发apache以发送已经错误的文档。我认为这个错误文档在搜索之后位于(在Ubuntu中):“/ usr / share / apache2 / error /HTTP_NOT_FOUND.html.var”

当我使用以下内容时:

<?php
    http_response_code(404);
    die();
?>

在Web浏览器中看起来像这样:

enter image description here

当我请求一个真正不在Web服务器上的URL时,它看起来像这样:

enter image description here

我想知道如何使用Apache的默认404页面使“/admin.php”看起来像第二张图像。有没有办法在不使用.htaccess文件的情况下执行此操作,只需从PHP进行操作即可如果没有,我只需要弄清楚如何搞乱Apache设置。

2 个答案:

答案 0 :(得分:4)

没有办法通过返回404来执行此操作,因为Apache将找到该文件,因此将不再抛出错误页面。您可以做的最好的事情是模拟Apache错误页面:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /<?php echo htmlspecialchars($_SERVER['REQUEST_URI']); ?> was not found on this server.</p>
</body></html>

答案 1 :(得分:0)

完整的示例php嵌入(经过测试)如下:

if ( $_SESSION['login_user'] !== "admin" ) {

    echo("<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">");
    echo("<html><head>");
    echo("<title>404 Not Found</title>");
    echo("</head><body>");
    echo("<h1>Not Found</h1>");
    echo("<p>The requested URL ".htmlspecialchars($_SERVER['REQUEST_URI'])." was not found on this server.</p>"); 
    echo("<hr>");
    echo("<address>".apache_get_version()." Server at ".$_SERVER['SERVER_ADDR']." Port ".$_SERVER['SERVER_PORT']."</address>");
    echo("</body></html>");
    exit;
        }