|
|
|
| Добрый вечер!
У меня есть вопрос на тему защиты авторизации, как и на сколько она защищена, и что можно переправить.
index.php
<?php
session_start();
include ('mysql.php');
if (!isset($_SESSION['id']))
{
if (isset($_COOKIE['login']) && isset($_COOKIE['password']))
{
$login = mysql_escape_string($_COOKIE['login']);
$password = mysql_escape_string($_COOKIE['password']);
$query = "SELECT `id`
FROM `users`
WHERE `login`='{$login}' AND `password`='{$password}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($sql) == 1)
{
$row = mysql_fetch_assoc($sql);
$_SESSION['user_id'] = $row['id'];
}
}
}
if (isset($_SESSION['user_id']))
{
$query = "SELECT `login`
FROM `users`
WHERE `id`='{$_SESSION['user_id']}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($sql) != 1)
{
header('Location: login.php?logout');
exit;
}
$row = mysql_fetch_assoc($sql);
$welcome = $row['login'];
}
else
{
$welcome = 'text';
}
print '<h3>You are inloga as:, ' . $welcome . '.</h3>
<a href="closed.php">Logout</a><br />';
if (!isset($_SESSION['user_id']))
{
print '<a href="login.php">Login</a><br />';
print '<a href="register.php">Register</a><br />';
}
else
{
print '<a href="login.php?logout">Logout</a><br />';
}
?>
|
mysql.php
<?php
mysql_connect("localhost", "root", "") or die (mysql_error());
mysql_select_db("pass") or die (mysql_error());
mysql_query("set character_set_client ='swe7_bin'");
mysql_query("set character_set_results ='swe7_bin'");
mysql_query("set collation_connection ='utf8_swedish_ci'");
function slashes(&$el)
{
if (is_array($el))
foreach($el as $k=>$v)
slashes($el[$k]);
else $el = stripslashes($el);
}
if (ini_get('magic_quotes_gpc'))
{
slashes($_GET);
slashes($_POST);
slashes($_COOKIE);
}
?>
|
login.php
<?php
session_start();
include ('mysql.php');
if (isset($_GET['logout']))
{
if (isset($_SESSION['user_id']))
unset($_SESSION['user_id']);
setcookie('login', '', 0, "/");
setcookie('password', '', 0, "/");
header('Location: index.php');
exit;
}
if (isset($_SESSION['user_id']))
{
header('Location: add_cats.php');
exit;
}
if (!empty($_POST))
{
$login = (isset($_POST['login'])) ? mysql_real_escape_string($_POST['login']) : '';
$query = "SELECT `salt`
FROM `users`
WHERE `login`='{$login}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($sql) == 1)
{
$row = mysql_fetch_assoc($sql);
$salt = $row['salt'];
$password = md5(md5($_POST['password']) . $salt);
$query = "SELECT `id`
FROM `users`
WHERE `login`='{$login}' AND `password`='{$password}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
if (mysql_num_rows($sql) == 1)
{
$row = mysql_fetch_assoc($sql);
$_SESSION['user_id'] = $row['id'];
$time = 86400;
if (isset($_POST['remember']))
{
setcookie('login', $login, time()+$time, "/");
setcookie('password', $password, time()+$time, "/");
}
header('Location: add_cats.php');
exit;
}
else
{
die('Error!. — <a href="login.php">Du måste logga in!</a>');
}
}
else
{
die('Error!. — <a href="login.php">Du måste logga in!</a>');
}
}
print '
<form action="login.php" method="post">
<table>
<tr>
<td>Namn:</td>
<td><input type="text" name="login" /></td>
</tr>
<tr>
<td>Lösenord:</td>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td>Kom ihåg mig:</td>
<td><input type="checkbox" name="remember" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Logga in" /></td>
</tr>
</table>
</form>
';
?>
|
| |
|
|
|
|
|
|
|
для: JESS
(16.04.2009 в 04:53)
| | перепостите код так, чтобы его можно было читать.
И по возможности - без горизонтальной прокрутки окна. | |
|
|
|
|
|
|
|
для: Trianon
(16.04.2009 в 08:05)
| | Всмысле новую тему сделать с исправленным текстом, или как? | |
|
|
|
|
|
|
|
для: JESS
(17.04.2009 в 00:20)
| | либо новую либо поправьте по этой ссылке | |
|
|
|
|
|
|
|
для: Trianon
(17.04.2009 в 08:56)
| | Все переделал))) | |
|
|
|
|
|
|
|
для: Trianon
(17.04.2009 в 08:56)
| | Привет всем, кто ни буть может ответит на мой пост? | |
|
|
|
|
|
|
|
для: JESS
(27.07.2009 в 04:17)
| | это ошибка. нужно проверять включен режим магических кавычек или нет.
$login = (isset($_POST['login'])) ? mysql_real_escape_string($_POST['login']) : '';
|
это тоже. достаточно в любое поле пробел сунуть, чтобы это условие выполнилось
Вам нужно уделять особое внимание проверкам.
Пользователь может представиться пробелом, каким нибудь кодом, или несколькотысячным текстом например.
http://www.softtime.ru/info/articlephp.php?id_article=35
http://softtime.ru/forum/read.php?id_forum=1&id_theme=27389 | |
|
|
|
|