Проблем с показване на информация от Mysql

obqvi_in

Registered
Тава е логин форма, в която имам файлът register.php
PHP:
include "1config.php";

$connect = mysql_connect($host, $user, $pass);
mysql_select_db($bd, $connect) or die (mysql_error());
mysql_query("SET names cp1251");

if(isset($_POST['reg']))
    {
     $username = addslashes($_POST['username']);
     $password = addslashes($_POST['password']);
     $password2 = addslashes($_POST['password2']);
	 $url = addslashes($_POST['url']);
     $email = addslashes($_POST['email']);

        if (!empty($username) and !empty($password) and !empty($password2) and !empty($email) and !empty($url))
        {
		    if((strlen($password) >= 6) && (strlen($password2) >= 6))
			{
               if($password == $password2)
                {
                 $hash = md5($password);
                 $hash2 = md5($password2);
                 mysql_query("INSERT INTO `users` (`username`,`password`,`password2`,`email`,`url`) 
				 VALUES ('$username','$hash','$hash2','$email','$url')") or die(mysql_error());
                 echo "<span class='svobodno'>Вие се регистрирахте успешно.</span>";
                }
				else
				{
                 echo "<span class='greshka'>Въведените пароли не съвпадат.</span>";
                }
			}
            else
            {
             echo "<span class='greshka'>Паролата е прекалено къса.</span>";
            }
        }
		else
        {
         echo "<span class='grashka'>Не сте попълнили всички полета!</span>";
        }
    }
?>

<center>
<div class="div-form"><form class="form" method="post" action=""> 
<table border="0">
<tr><td class="danni" align="right">Име:</td> <td><input placeholder="Минимум 4 символа" type="text" name="username" id="username" /></td>
<td><span id="userResult"></span></td></tr><br />

<tr><td class="danni" align="right">Парола:</td><td><input placeholder="Минимум 6 символа" type="password" name="password" id="password" /></td>
<td><span id="passResult"></span></td></tr><br />

<tr><td class="danni" align="right">Отново:</td><td><input placeholder="" type="password" name="password2" id="password" /></td>
<td><span id="passResult"></span></td></tr><br />

<tr><td class="danni" align="right">Уеб сайт:</td><td><input placeholder="Валиден сайт или линк" type="text" name="url" id="url" /></td>
<td><span id="urlResult"></span></td></tr><br />

<tr><td class="danni" align="right">Имейл:</td><td><input placeholder="Валиден имейл" type="text" name="email" id="email" /></td>
<td><span id="emailResult"></span></td></tr><br />

<tr><td></td><td align="center"><input type="submit" value="Регистрирай се" name="reg" /></td></tr>

</div></form>
</center>
До тук всичко е наред всички полета са в база данни когато отида в файла profile.php за да ги покажа и редактирам ми показва само "username", "password" а другите не ги показва
profile.php
PHP:
<?php include "1config.php";
$connect = mysql_connect($host, $user, $pass);
mysql_select_db($bd, $connect) or die (mysql_error());
mysql_query("SET names cp1251");

echo "<br>";
if($_SESSION['username']) { 
?>
<table class="zdravei">
<tr><td align="left"><?php echo "<b>Зравей: </b>" . $_SESSION['username'] ?></td>
<td align="right"><a href="logout.php" class="izhod">Изход</a></td></tr>
</table>
<?php
echo "<h1>Профил</h1>";
echo "Потребител: " . $_SESSION['username'] . "<br>";
echo "Сайта ти:" . $_SESSION['url'] . "<br>";
echo "Имeйл: " . $_SESSION['email'] . "<br>";
echo "Парола: " . $_SESSION['password'] . "<br>";
?>
<a href="change.php">Промени си профила </a>
<?php
}
else{ include "user.php"; }
?>
 
можи би защото ги извикваш $_SESSION ..... а при създаване на сесия ти запазваш само името и паролата.Аз ти препоръчвам като сесия да пазиш само юзърнейм и след това mysql_query("SELECT * FROM users WHERE username = $user"),където $user си го правиш да ти е равно на $_SESSION['username'].И после само си ги извеждаш от заявката.
 
Това не го разбрах изцяло, но мисля че трябwа да покажа и файла login.php
PHP:
include "1config.php";
$connect = mysql_connect($host, $user, $pass);
mysql_select_db($bd, $connect) or die (mysql_error());
mysql_query("SET names cp1251");


if($_GET['action'] == "login") { 

$username = addslashes($_POST['username']);
$password = addslashes($_POST['password']);

if($_POST['username'] == $username && $_POST['password'] == $password) { 

$_SESSION['username'] = $username;
$_SESSION['password'] = $password;

//* Nadolu za registrirani 

include "header.php"; ?>
<table class="zdravei">
<tr><td align="left"><?php echo "<b>Зравей:</b>" . $_SESSION['username'] ?></td>
<td align="right"><a href="logout.php" class="izhod">Изход</a></td></tr>
</table>

<div class="profile">
<a href="profile.php">Профил</a>
</div>

<h1><center>Влязохте успешно</center></h1>

<?php $logink = true; 
}
}//krai
if($logink !== true) { 
?>
Влизането неуспешно -грешно име или парола
<?

} 
 elseif($_GET['action'] == 'change') { 

if(!isset($_POST['username']) || !isset($_POST['email']) || !isset($_POST['url']) || !isset($_POST['newpass'])) { 
} 

$file = file($datafile); 
while(list(,$value) = each($file)){ 
list($fname,$femail,$furl,$fusername,$fpassword) = explode('|', $value); 
if($_SESSION['username'] == $fusername){ 

$oldword = "$fusername|$femail|$furl|$fusername|$fpassword|"; 
$newword = $_POST['username'] . '|' . $_POST['email'] . '|' . $_POST['url'] . '|' . $_SESSION['username'] . '|' . $_POST['newpass'] . '|'; 
$fp = fopen($datafile, 'r'); 
$data = fread($fp, filesize($datafile)); 
fclose($fp); 
$newdata = str_replace($oldword, $newword, $data); 
$fp = fopen($datafile, 'w'); 
fwrite($fp,$newdata) or die ('error writing'); 
fclose($fp); 

$succ = true;
?> 
Всичко беше променено успешно моля <a href="user.php">влез</a>
<?

$_SESSION['username'] = FALSE; 
$_SESSION['password'] = FALSE; 
$_SESSION['url'] = FALSE; 
$_SESSION['email'] = FALSE; 

} 
} 
if($succ !== true) { 
?>
Влизането неупешно -грешно име или парола
<?
} 
} else { 
exit; 
} 
?>
И когато добавя под"$username = addslashes($_POST['username']);
$password = addslashes($_POST['password']);" това "$email = addslashes($_POST['email']);
$url = addslashes($_POST['url']);" ми излиза Undefined индекс:
 
За XSS (Cross-site Scripting).

Дупката ти е, че позволяваш да се регистрират потребители с ето такива никове: <b>user, след това когато показваш името ти не слагаш htmlspecialchars и тогава <b> тага се чете за действителен таг и цялата страница на логнатия потребител става болдната. Това е само пример с <b> може да се сложат разни Javascript - ове, за session hjacking и т.н.

SQL Injection - a, ползваш само addslashes, а те се заобекалят, чрез символи, който се равняват на единичните кавички. Може да ползваш prepare statements (PDO или mysqli_ връзка към базата данни).

Също може чрез някой други функции (ако много държиш на mysql_ връзка):
http://php.net/manual/en/function.mysql-real-escape-string.php


А ето и малко информаця:
http://www.ziki.com/fr/gcouprie+37899/post/bypass-addslashes-with-utf-8-characters+10551778
 
Какво ли не пробвах и не мога да се оправя, аз искам само да покажа данни на потребителя, но дали има разлика когато имаме сесии.
 
При логина ти проверяваш дали $_POST['username'] е равен на $_POST['username'] ... тук нещо ти се губи ситуацията.

Това се проверява във базата данни, ако на този username и тази парола отговаря някой запис от таблицата във базата данни, следователно потребитела се е логнал и му записваш:

PHP:
$_SESSION['username'] = $username;
$_SESSION['url'] = $url; // vzeto ot db
$_SESSION['something'] = $something; //vzeto ot nqkyde
 

Back
Горе