Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何防止用户表单进入其他用户配置文件_Php - Fatal编程技术网

Php 如何防止用户表单进入其他用户配置文件

Php 如何防止用户表单进入其他用户配置文件,php,Php,我有一个用户登录系统,用户页面在URL中有自己的id。例如xxx/profile.php?id=1 我的问题是:如何防止登录用户在URL中写入其他用户id并进入其站点 下面是profile.php文件的代码: session_start(); require 'config2.php'; require_once 'user.class.php'; if (!user::isLogged()) { echo '<p class="error">Przykro

我有一个用户登录系统,用户页面在URL中有自己的id。例如xxx/profile.php?id=1 我的问题是:如何防止登录用户在URL中写入其他用户id并进入其站点

下面是profile.php文件的代码:

          session_start();
require 'config2.php'; 
require_once 'user.class.php';

if (!user::isLogged()) {
 echo '<p class="error">Przykro nam, ale ta strona jest dostepna tylko dla zalogowanych     u?ytkowników.</p>';
     }

else {
$id = $_GET['id'];


  $userExist = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM users WHERE id = '$id'"));


   if ($userExist[0] == 0) {
    die ('<p>Przykro nam, ale u?ytkownik o podanym identyfikatorze nie istnieje.</p>');
}



 $profile = user::getDataById ($id);

echo '<h1>Profil u¿ytkownika '.$profile['login'].'</h1>';
 echo '<b>ID:</b> '.$profile['id'].'<br />';
echo '<b>Nick:</b> '.$profile['login'].'<br />';
echo '<b>Email:</b> '.$profile['email'].'<br />';
echo '<b>Obiekt:</b> '.$profile['obiekt'].'<br />';

   echo '<b>Typ obiektu:</b> '.$profile['typ'].'<br />';
 echo '<b>Kod pocztowy:</b> '.$profile['kod'].'<br />';

    echo '<b>Adres:</b> '.$profile['adres'].'<br />';

echo '<b>Poczta:</b> '.$profile['poczta'].'<br />';

echo '<b>Tel. stacjonarny:</b> '.$profile['tels'].'<br />';

echo '<b>Tel. komórkowy:</b> '.$profile['telk'].'<br />';
    echo '<b>Adres strony internetowej:</b> '.$profile['www'].'<br />';




    echo  "<img src ='wyslane/$profile[photo]'";

      }
session_start();
需要'config2.php';
需要一次“user.class.php”;
如果(!user::isLogged()){
echo'

Przykro nam,ale ta strona jest dostepna tylko dla zalogowanych u?ytkowników.

; } 否则{ $id=$_GET['id']; $userExist=mysql\u fetch\u数组(mysql\u查询(“从用户中选择COUNT(*),其中id='$id')); 如果($userExist[0]==0){ 死亡(“Przykro nam,ale u?ytkownik o podanym identifikatorze nie istnieje.

”); } $profile=user::getdatabyd($id); echo'Profil u?ytkownika'。$profile['login'.'; 回显'ID:'.$profile['ID'].
; 回显“尼克:”.$profile['login']。
; 回显“Email:”.$profile['Email']。
; 回显“Obiekt:”.$profile['Obiekt']。
; 回显'Typ obiektu:'.$profile['Typ'].
; 回音“Kod pocztowy:”.$profile['Kod'].
; 回音“地址:”.$profile['Adres'].
; 回显'Poczta:'.$profile['Poczta'].
; echo'Tel.stacjonarny:'.$profile['tels'].
; echo'Tel.komórkowy:'.$profile['telk'].
; echo“Adres strony internetowej:”.$profile['www']。
; 回声“ 下面是user_class.php:

             <?php

         class user {

           public static $user = array();


      public function getData ($login, $pass) {
    if ($login == '') $login = $_SESSION['login'];
    if ($pass == '') $pass = $_SESSION['pass'];

     self::$user = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE  login='$login' AND pass='$pass' LIMIT 1;"));
     return self::$user;
     }



    public function getDataById ($id) {
    $user = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE id='$id' LIMIT 1;"));
    return $user;
    }


  public function isLogged () {
  if (empty($_SESSION['login']) || empty($_SESSION['pass'])) {
  return false;
  }

  else {
  return true;
  }
 }





   public function passSalter ($pass) {
    $pass = '$@@#$#@$'.$pass.'q2#$3$%##@';
    return md5($pass);
 }

  }
     ?>

我在这里还有我的主页代码:

          if (user::isLogged() == $_GET['id']) {

   $user = user::getData('', '');

 echo '<p>You are logged '.$user['login'].'!</p>';
   echo '<p>You may see your <a href="profile.php?id='.$user['id'].'">profil</a> or <a              href="logout.php">wylogować</a></p>';
      }

    else {

  echo '<p>You are not logged.<br /><a href="login.php">Zaloguj</a> się lub <a  href="register.php">zarejestruj</a> jeśli jeszcze nie masz konta.</p>';
   }
if(user::isLogged()=$\u GET['id']{
$user=user::getData(“”,”);
回显“您已登录”。$user['login']。!

”; 回显“您可能会看到您的或”; } 否则{ echo'您未被登录。
sięlub jeśli jeszcze nie masz konta。

; }

我尝试了Ryan建议的方法,但它(页面)只有在我双击配置文件链接时才起作用,否则链接会将我再次发送到登录页面。

不要通过URL($\u GET)传递用户ID,尝试在用户登录时用用户ID设置一个
$\u SESSION
变量


然后,您可以转到
xxx/profile.php
并读取$\u会话变量,找出要显示其配置文件的用户的id。

现在我不知道如何检索当前登录用户的id,但举例来说,您可以从
user::loggedInID()获取该id
-您只需将其与正在访问的配置文件的id进行匹配即可

例如:

if(user::loggedInID() == $_GET['id']) {
    /* Allow profile to be edited */
} else {
    /* Unable to edit profile */
}
另一方面,您的数据库极易受到以下查询的攻击:

mysql_query("SELECT COUNT(*) FROM users WHERE id = '$id'")
由于从查询字符串中检索到了
$id
,而没有经过清理,因此查询是开放的


我建议您不仅要首先清理查询输入,还要使用
mysqli.*
函数而不是
mysql.*
函数(由于不推荐)。更好的是,使用准备好的语句。

登录时只需将登录的用户ID存储到会话变量中,如
$\u session['Loggedusr']
并在每页开始时检查此项

session_start();
if($_SESSION['Loggedusr'] != $_GET['id'])
header("Location: loginpage.php");

您的代码易受sql注入攻击请检查此