簡體   English   中英

將用戶限制到其個人資料頁面

[英]Limit user to their profile page

在我的網站上,我有一個用戶登錄系統,當他們登錄時,他們被帶到其個人資料頁面,該頁面由其uid取消。 問題是,沒有什么可以阻止用戶更改uid並轉到其他人的個人資料並充當他們的。 為了阻止這種情況,我實現了URL / MySQL系統,通過該系統,如果用戶的uid不是URL中的uid,則會將其重定向到自己的配置文件。 這里的問題是,配置文件上有一些表單會更改URL,這樣做會刪除uid查詢,從而導致頁面(因為缺少uid)將您帶到您的配置文件,而忽略了表單輸入。

代碼是:

<?php
mysql_connect ('x', 'x', 'x');
mysql_select_db ('x');

if(isset($_COOKIE['wd_un'])) {
    $un = $_COOKIE['wd_un'];
    $pass = $_COOKIE['wd_pass'];

    $cook = "SELECT * FROM x WHERE username = '$un' AND password = '$pass' limit 1";
    $cookr = mysql_query($cook) or die (mysql_error());
        if(mysql_num_rows($cookr) == 0) {
            header ("Location: index.php");
        }
        else {
            $urluid = mysql_real_escape_string($_GET['uid']);
            $uidcheck = "SELECT * FROM x WHERE username = '$un' AND password = '$pass'";
            $uidcheckq = mysql_query($uidcheck) or die (mysql_error());
            while($rcu = mysql_fetch_assoc($uidcheckq)) {
                $dbuid = $rcu['uid'];
                        if($urluid != $dbuid) {
                            header ("location: home.php?uid=$dbuid");
                        }
                        else {
                        }
            }
        }
    }
mysql_close();
?>

有沒有解決的辦法?

您在此處擁有的這個代碼塊充滿了弊端。

首先,絕對不要將用戶密碼存儲在cookie中。 您應該只在Cookie中存儲一個會話ID,然后將其余的會話數據存儲在數據庫中的會話表中,該表包含用戶ID以及您可能希望基本訪問的任何其他內容。也可以在此表中。

現在,您可以安全地使用URL中的user_id,因為交叉引用會將人們拒之門外。

當然,在加載時,您會交叉引用基於您的cookie id從會話表中提取的mysql結果。 如果它們不匹配,顯然引導它們。

至於您的表單重定向,您需要重新構造隨后的處理方式。 您可以使您的個人資料頁面始終只提取與Cookie中與會話ID相關的個人資料。 這樣可以消除對URL的依賴,從而完全解決此問題。

另外-請查看mysql_real_escape_string()清理您的輸入。 盲目接受mysql查詢的cookie信息非常危險。 除非您確實確實打算在站點中留下巨大的注入孔。

您應該使用Cookie ID來標識用戶,而不是從URL中提取用戶。 如果cookieID與UserID不匹配,則重定向到他們自己的配置文件。

基本上,切勿使用url傳遞私人數據的用戶ID。 始終引用cookie。

僅依靠URL字符串來標識用戶是您所描述的可用性問題之上的巨大安全漏洞。

暫無
暫無

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

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