авторизация

  • Автор темы san4es
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

san4es

#1
есть такой скрипт.
на страничке вводим логин и пароль, при нажатии на кнопку переходим на ентот скрипт, происходит проверка и в случае успеха переходим на секретную страничку.
работает только в IE, в opera, firefox никуда переходит, сессия не регистрируется, т.е. остаётся на этом скрипте и всё, белый экран.
подскажите как исправить

Код:
<?php

$SERVER_ROOT = "http://localhost/";
if(eregi("^$SERVER_ROOT",$HTTP_REFERER)){
if($Submit){
$link = mysql_connect("localhost", "root", "") or die("невозможно соединиться с сервером : " . mysql_error());
mysql_select_db("db1") or die("невозможно выбрать базу данных");
$query = "SELECT * FROM uLogins WHERE ulogin=\"$user_name\" AND upassw=\"$user_pass\"";
$result = mysql_query($query) or die("Ошибка запроса : " . mysql_error());
$nr=mysql_num_rows($result);
if($nr==0){
header("Location: index.php?err=1");
exit;
}
session_register("logged_user");
session_register("catu");
$logged_user = $user_name;
$row=mysql_fetch_array($result);

if($row["ucat"]==1){
$catu=$row["ucat"];
header("Location: secretplace1.php");
exit;
}
if($row["ucat"]==2){
$catu=$row["ucat"];
header("Location: secretplace2.php");
exit;
}

header("Location: index.php?err=22");
exit;
}
}
?>
 
S

san4es

#2
в принципе если убрать

Код:
 $SERVER_ROOT = "http://localhost/";
if(eregi("^$SERVER_ROOT",$HTTP_REFERER)){
if($Submit){
то всё работает, однако если передать через заголовок логин и пароль, то можно спокойно авторизироваться.
 
D

deadt04ka

#3
попробуй заменить на
Код:
if(preg_match("/^$SERVER_ROOT/i",$HTTP_REFERER)){
if($Submit){
 
D

deadt04ka

#5
блин по моему там
Код:
if(preg_match("/^".$SERVER_ROOT."/i",$HTTP_REFERER)){
так...
 
D

deadt04ka

#7
З.Ы.
$SERVER_ROOT = "http://localhost/"; ты такой оставляешь... если такой то в адресной строке должно быть
http://localhost/ иаче если ты его залил на сайт и в какую либо папку то прописываеться домен этого сайта + дальнейший адрсе.. вот допустим
http://codeby.net -сайт и тут находиться твой скрипт авторизации... значит
$SERVER_ROOT = "http://codeby.net";
и воообще я тебе рекомендую
Код:
$SERVER_ROOT = "http://localhost/";
if(eregi("^$SERVER_ROOT",$HTTP_REFERER)){
это удалить!
 
S

san4es

#8
сделал вот так
Код:
  if (isset($_POST['user_name'],$_POST['user_pass']) && !empty($_POST['user_name']) && !empty($_POST['user_pass']))
предыдущий вариант смарел по учебникам. там сказано что-то про безопасность...
 
P

Pasha

#9
secretplace1.php, secretplace2.php.. безопасно, никто не догадается :blink:
 
M

MajestiC

#10
Народ, зачем вы пытаетесь исправить ошибку в регулярке, когда сам код - сплошное безобразие.

Для: san4es
Не занимайся ерундой, тебе всего-лишь нужно проверить права доступа к этой странице.
Проверки на реферера - сущая глупость, какая разница откуда пришел запрос на авторизацию.

Код:
$query = "SELECT * FROM uLogins WHERE ulogin=\"$user_name\" AND upassw=\"$user_pass\"";
Читай про mysql_escape_string, $_GET, $_POST, register_globals. register_globals не используй, как ты это делаешь сейчас.

Код:
session_register("logged_user");
session_register("catu");
Что за старинные методы

В начале скрипта session_start();
А потом просто $_SESSION['logged_user'] = 1; например, если всё ок.

В секретном скрипте:
Код:
session_start();
if (isset($_SESSION['logged_user']) && $_SESSION['logged_user'] == 1)
{
// Тут делаешь свои дела если всё ок
}
else
{
die('Требуется авторизация'); // Или редирект на страницу логина
}
PS. Книжки - зло, мануал - рулит.
 
Статус
Закрыто для дальнейших ответов.