php - 如何防止用户绕过php认证

标签 php html mysql authentication

为了简单起见,我们将其称为 html1。

当用户访问 html1 时,会出现一个 login2.php 登录页面,可以访问隐藏页面 client.php。

然后转到 checklogin.php...如果密码和用户名匹配...则转到隐藏的 client.php 页面...如果不匹配...则返回主页。

用户必须登录才能查看隐藏的client.php页面的内容。

但是,用户可以通过在地址栏上输入 ..../client.php 来访问 client.php...因此绕过了身份验证页面并使其无用。我只需输入 servername/client.php...它仍然显示 client.php 的内容...但我希望 client.php...是私有(private)的!

如何防止这种情况发生?

谢谢。

第一个登录页面...

<html>
<head>
<title>Login Form</title>
</head>
<body>
<h2>Login Form</h2>
<table>
<form method="post" action="checklogin2.php">
<div id="name">User Id: <input type="text" name="****"></div>
<div id="password">Password: <input type="password" name="*******"></div>
<div class="button"><input type="submit" value="Login"></div>
</form>
</table>
</body>
</html>

然后就到了...... 检查登录2.php

 <?php
    $*** = $_POST['****'];
    $***** = $_POST['***'];

if($uid == '****' and $***** == '*****')
{
        session_start();
        $_SESSION['sid']=session_id();
        header("location:securepage.php");
}


else
        {
                header("location:index.html");
        }
?>

然后就到了... securepage.php

<?php
        session_start();
        if($_SESSION['sid']==session_id())
        {

 header("location:client.php");

                echo "<a href='logout.php'>Logout</a>";
        }
        else
        {
                header("location:login.php");
        }
?>

最佳答案

在每个页面的开头,您必须检查用户是否已获得授权。

checklogin.php上,如果用户输入了正确的登录名和密码,只需设置类似的内容

$_SESSION['authorized'] = TRUE;

...在其他页面上只需检查用户是否获得授权:

if (isset($_SESSION['authorized']) && $_SESSION['authorized'] === TRUE) {
    // Alright, let's show all the hidden functionality!
    echo "Psst! Hey! Wanna buy some weed?";
} else {
    // User is not authorized!
    header('Location: login.php');
    exit();
}

请注意,您不必弄乱 cookie、 session ID 等 - 只需在所有内容之前添加 session_start() 并自由使用 $_SESSION var。

这是 session (特别是$_SESSION变量)的主要优点:您可以记住同一网站上不同页面之间的一些数据。

关于php - 如何防止用户绕过php认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29098142/

相关文章:

mysql - 在选择查询表名称上使用变量

php - 使用 php 从 mysql 数据库中选择随机唯一记录

php - 我想从 2 个不同的表中检索列表中的数据

php - PHP 的 setlocale() 中的 en_GB 和 en_GB.UTF8 有什么区别?

jquery - Bootstrap Carousel 只加载一张图片

javascript - 模态不关闭视频的嵌入式 iframe

mysql - 计算两列的差异并存储到另一列

php - 在 Yii/PHP 中跟踪未登录的用户

html - 在平移图像背景上放置一个小图像

Mysql查询小知识