html 如何加入 http 基本认证

2021-07-26 11:33:40 +08:00
 SSang

我有一个的网页,不想要直接暴露出来,但又不是什么重要的信息,所以想要加入一个简单的认证

主要是我不懂 html/js/php 啥的,都是 copy 别人的代码,所以希望能尽量简单点

目前我的做法

index.html 里面调用 php

<html lang="ch">

<head>
...
</head>

<body>
    <script type="text/javascript" src="auth.php"></script>
    <div class="center">
        <div class="box1">
            <h4><a href="http://www.a.com:8081/">a site</a></h4>
        </div>
    </div>
</body>

</html>
<?php
    if (!isset($_SERVER['PHP_AUTH_USER'])) {
        header("WWW-Authenticate: Basic realm=\"My Realm\"");
        header("HTTP/1.0 401 Unauthorized");
        print "invalid credentials!\n";
        exit;
    } else {
        if (($_SERVER['PHP_AUTH_USER'] == 'admin') && ($_SERVER['PHP_AUTH_PW'] == 'admin')) {
            print "Welcome to the private area!";
        } else {
            header("WWW-Authenticate: Basic realm=\"My Realm\"");
            header("HTTP/1.0 401 Unauthorized");
            print "invalid credentials!\n";
            exit;
        }
    }
?>

这样只能实现一个假的认证,输入密码错误会一直返回 401,但实际上页面已经发送给客户端了,F12 就可以看到。想问一下要怎么修改能让他不认证的情况无法显示页面

2004 次点击
所在节点    HTML
6 条回复
XiLingHost
2021-07-26 11:43:49 +08:00
nginx 那里套一层 http_basic 就好了
jingslunt
2021-07-26 11:59:42 +08:00
ThirdFlame
2021-07-26 12:42:06 +08:00
一般来说是在 apache nginx 等 web 中间件做。 如果非要在 php 做,也有办法 ob_start ob_end_flush 了解下
shansing
2021-07-26 12:46:13 +08:00
你这种方式永远不能阻止页面发送给客户端。建议是在 Web 服务器程序(如 Nginx 或 Apache )那里做认证。如果你坚持要用 PHP 做,可以这样修改:
auth.php 文件里去掉这行:
> print "Welcome to the private area!";
将 index.html 更改为 index.php (重命名,以及替换所有用到这个 URL 的地方),在文件最开始加入这句:
> <?php require 'auth.php'; ?>
这样也能实现你想要的效果。
crab
2021-07-26 12:47:37 +08:00
搜索关键字:php 为任意页面设置密码访问
SSang
2021-07-26 13:43:14 +08:00
感谢各位,是我想复杂了,在 nginx 做是个好办法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/791776

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX