簡體   English   中英

如何防止用戶繞過php身份驗證

[英]How to prevent user from bypassing php authentication

為了簡單起見,我們將其稱為html1。

當用戶轉到html1時,會有一個login2.php登錄頁面,用於訪問隱藏頁面client.php。

然后,它進入checklogin.php ...如果密碼和用戶名匹配...然后它進入隱藏的client.php頁面...如果不..它返回主頁。

用戶必須登錄才能查看隱藏的client.php頁面的內容。

但是,用戶可以通過在地址欄上輸入.... / client.php來訪問client.php,從而繞過身份驗證頁面並使其無效。 我可以只輸入servername / client.php ...,它仍然顯示client.php的內容...但是我希望client.php ...是私有的!

如何防止這種情況發生?

謝謝。

第一個登錄頁面...

<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>

然后它就去了...。checklogin2.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,會話ID等session_start()只需在所有內容之前添加session_start()並自由使用$_SESSION var。

這是會話的主要$_SESSION (尤其是$_SESSION變量):您可以記住同一網站上不同頁面之間的一些數據。

所有頁面都必須檢查用戶是否已通過身份驗證。 我建議使用對象,並始終繼承為您檢查該類的類。 到處都具有相同的代碼,執行相同的事情並不是一件有趣的事情。

if($_SERVER["PHP_SELF"] == '/yourpagefolder/yourpage.php' && !isset($_SESSION['login_user'])){
    header('location: login.php');
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM