V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Dive into HTML5
http://diveintohtml5.org/
SSang
V2EX  ›  HTML

html 如何加入 http 基本认证

  •  
  •   SSang · 2021-07-26 11:33:40 +08:00 · 2148 次点击
    这是一个创建于 1207 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    主要是我不懂 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 就可以看到。想问一下要怎么修改能让他不认证的情况无法显示页面

    XiLingHost
        1
    XiLingHost  
       2021-07-26 11:43:49 +08:00
    nginx 那里套一层 http_basic 就好了
    ThirdFlame
        3
    ThirdFlame  
       2021-07-26 12:42:06 +08:00
    一般来说是在 apache nginx 等 web 中间件做。 如果非要在 php 做,也有办法 ob_start ob_end_flush 了解下
    shansing
        4
    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
        5
    crab  
       2021-07-26 12:47:37 +08:00
    搜索关键字:php 为任意页面设置密码访问
    SSang
        6
    SSang  
    OP
       2021-07-26 13:43:14 +08:00
    感谢各位,是我想复杂了,在 nginx 做是个好办法
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2723 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:21 · PVG 08:21 · LAX 16:21 · JFK 19:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.