[英]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.