Лог/Пас

Статус
Закрыто для дальнейших ответов.

Apop

Новичок
Регистрация
19.04.2008
Сообщения
1
можете обяснить или подсказать литературу, как к сайту сделать и подрубить базу логов и пасов
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Берём обычный Mysql и создаём в нём 1 таблчику
id INT(11) auto_incriment NOT NULL
login VARCHAR(255) NOT NULL
password VARCHAR(32) NOT NULL

Пароль будем хранить в MD5 хеше, для пущей защиты, его длина 32 символа!
Теперь бирём PHP с поддержкой библиотеки Mysql. Делаем на подобии этого, не менял...

Аутентификация
Код:
<?php 

session_start();
$host_db = "localhost"; // имя хоста
$user_db = "root"; // юзер(привилегии)
$pass_db = ""; // пароль юзера
$db_db = "ajax"; // база данных
$link = mysql_connect($host_db, $user_db, $pass_db) or die("Не возможно подключиться к базе данных");
mysql_select_db($db_db, $link) or die("Не могу выбрать базу данных");
if(isset($_POST['do'])){
  $login = mysql_escape_string($_POST['login']);
  $pass = md5($_POST['password']);
  $result = mysql_query("SELECT * FROM users WHERE login='{$login}' AND password='{$pass}'");
  if(mysql_num_rows($result) == 1) {
	 $user = mysql_fetch_array($result);
	 if($user['login'] == $login && $user['password'] == $pass) {
		$_SESSION['login'] = $user['login'];
		$_SESSION['password'] = $user['password'];
	 } else {
		header("Location: ".$_SERVER['PHP_SELF']);
		exit;
	 }
  } else {
	 header("Location: ../index.php?page=author&error");
	 exit;
  }
  mysql_close($link);
  header("Location: ".$_SERVER['PHP_SELF']);
}

if(isset($_SESSION['login']) && isset($_SESSION['password'])) {
   echo "Вы авторизованы";
} else {
?>
<html>
<body>
<div align="center" style="font-weight: bold;">
Форма авторизации
</div>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']?>">
Логин: <input type="text" name="login"><br>
Пароль: <input type="password" name="password"><br>
<input type="submit" name="do" value="Авторизоваться">
</form>
</html>
<?}?>
Регистрация
Код:
<?php
$host_db = "localhost"; // имя хоста
$user_db = "root"; // юзер(привилегии)
$pass_db = ""; // пароль юзера
$db_db = "ajax"; // база данных

if(isset($_POST['do'])) {
   if($_POST['login'] == "" || $_POST['pass'] == "") {
	  header("location: ".$_SERVER['PHP_SELF']."?error");
	  exit;
   }
   $link = mysql_connect($host_db, $user_db, $pass_db) or die("Не возможно подключиться к базе данных");
   mysql_select_db($db_db, $link) or die("Не могу выбрать базу данных");
   $login = mysql_escape_string($_POST['login']);
   $pass = md5($_POST['password']);
   $query = "INSERT INTO users(login, password) VALUES('".$login."', '".$pass."')";
   mysql_query($query) or die("Ошибка в запросе");
   header("location: ".$_SERVER['PHP_SELF']."?ok");
   exit;
}
?>
<html>
<body>
<div align="center">
   <?php echo (isset($_GET['ok'])) ? "Регистрация прошла успешно" : "";?>
   <?php echo (isset($_GET['error'])) ? "Поля <b>логин</b> и <b>пароль</b> не могут быть пустыми" : "";?>
</div>
<div align="center" style="font-weight: bold;">
Форма регистрации
</div>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']?>">
Логин: <input type="text" name="login"><br>
Пароль: <input type="password" name="password"><br>
<input type="submit" name="do" value="Зарегистрировать">
</form>
</html>
 

Ivan

суперМодератор
Регистрация
10.01.2007
Сообщения
316
Берём... да собсно ничё не берём ))
Alex верно сказал, что обычно для защиты паролей используется MD5 (http://ru.wikipedia.org/wiki/MD5)
Когда твой скрпит получит пассворд, он берёт от него сумму MD5 и проверяет есть ли такая среди записей passwd что хранишь ты.
Т.е. пароль ты не знаешь (по идее )) и честно хранишь у себя только эти md5. Если кто и хакнет твой сайт, то поживится ничем не сможет - обратно из md5 достать пассворд практически не реально.

Можно использовать криптование. Ну, например функция salt в perl. Или, поскать в CPAN - там для любителей перла много модулей для криптования с удбным интерфейсом.
Параноики могут брать salt (или ещё что) и только потом md5 от полученного. На время работы скрипта это сказывается незначительно.

MySQL использовать не обязательно, если тебя интересует только проверка пароля, мыла, ну и ещё чего (без объёмных данных, типа истории, персональных настроек). Можешь использовать простой текстовый файл (одна строка - данные на пользователя, разделишь данные пробелом, запятой или чем тебе нравится).

По perl можешь глянуть Клинтон Пирс "Perl за 24 часа" - есть на этом сайте. Просто, понятно. Пример работы с текстовой базой данных в файле там есть.

Логи - то же самое - только как правило - это текстовые файлы. В них записывают самые разные данные. Обычно формат лога предусматривает не только читаемость, но и возможность лёгкого парса в дальнейшем.
 

medwoodu

Злобный модер
Регистрация
22.12.2005
Сообщения
1 418
Alex, к вам вопрос: зачем писать в сессию логин и пароль, если по работе вам нужен id и group_id(идентификатор группы пользователей) -которого кстати у вас нет?
Еще один кирпич: почему
Код:
mysql_num_rows($result) == 1
когда ваш следующий код
Код:
$query = "INSERT INTO users(login, password) VALUES('".$login."', '".$pass."')";
явно разрешает добавление нескольких записей с одинаковым логином и паролем


P.S. mysql_close($link); - необходим только если вы работаете с несколькими соединениями, притом поочередно, закрытие соединения происходит автоматически после завершения скрипта.
 
Статус
Закрыто для дальнейших ответов.
Верх Низ