Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Авторизация в админ чисти(где я ошибся)

Сообщения:  [1-2] 

 
 автор: Unkind™   (27.05.2006 в 15:54)   письмо автору
 
   для: hell_riser   (27.05.2006 в 15:34)
 

Я бы сделал так:
index.php

<?
session_start
();
include 
"config.php";
include 
"access.php"
$g $_GET['g']; 
switch(
$g)

case 
'answ_form': include "guest/edite_form.php"; break; 
case 
'answ': include "guest/edite_msg.php"; break; 
case 
'delete': include "guest/delete_msg.php"; break; 
case 
'show': include "guest/show.php"; break; 
case 
'hide': include "guest/hide.php"; break; 
default: include 
"guest/guest.php";   

?>


access.php

<?php
if(!isset($HTTP_SESSION_VARS['login'])
{
session_register($_POST['login'], $_POST['password']);
header("Location: index.php");
}
else
{
$query mysql_query("SELECT * FROM users WHERE login='".$HTTP_SESSION_VARS['login']."' AND password='".$HTTP_SESSION_VARS['password']."' AND (user_status = 'admin' OR user_status='moder')");
//Если нет в БД, то редирект на форму
if(mysql_affected_rows() == 0)
{
header("Location: loginfrom.php");
exit();
}
}
?>


А если бы мне было нужно защитить файл access.php от прямого запроса юзера, то я бы сделал это с помощью .htaccess:

<Files "access.php"> 
  deny from all 
</Files>


Если не ошибаюсь, то SQL-инъекция возможно только для тех случаев, где переменная не защищена одиночными кавычками:


<?
include "config.php";
//Запрос с ошибкой
$query mysql_query("SELECT * FROM users WHERE id=".$_GET['id']."");
//Нормальный запрос
$query mysql_query("SELECT * FROM users WHERE id='".$_GET['id']."'");
?>

   
 
 автор: hell_riser   (27.05.2006 в 15:34)   письмо автору
 
 

Здравствуйте помогите найти ошибку!
Вот так выгляит файл index.php

<?
define
('ADMIN'TRUE);
//Проверка права доступа.
include "access.php";
 
$g $_GET['g'];
switch(
$g){
 case 
'answ_form': include "guest/edite_form.php"; break;
 case 
'answ': include "guest/edite_msg.php"; break;
 case 
'delete': include "guest/delete_msg.php"; break;
 case 
'show': include "guest/show.php"; break;
 case 
'hide': include "guest/hide.php"; break; 
 default: include 
"guest/guest.php";  
}
?>
:
файл access.php выглядит так

<?php
//Защита от прямого вызова скрипта.
if(!defined("ADMIN")) die;
session_start();
//Соединение с БД.
include "config.php";
//Проверка переданы ли даные формы.
if(isset($_POST['auth'])){
  
$pswd md5($_POST['pass']);
  
$_POST['login'] = mysql_escape_string(htmlspecialchars($_POST['login']));
//Запрос к БД.
  
$query "SELECT * FROM $user WHERE user_login = '".$_POST['login']."' && user_status = 'admin' || user_status = 'moder'";
  
$passw mysql_query($query);
  if(
$passw && mysql_num_rows($passw) > 0){//Если запрос вернул TRUE,
    
$psw mysql_fetch_assoc($passw);      //извлекаем пароль из БД.
    
if($psw['user_pass'] != $pswd){        //сверяем пароли, если FALSE 
      
echo "Ошибка авторизации !";         //выводим текст ошибки, иначе регистрируем
    
}else{                                 //сессионые переменные.
       
$pass $pswd;
       
$login $_POST['login'];
       
$_SESSION['status'] = $psw['user_status'];
       
$_SESSION['login'] = $_POST['login'];
       
$_SESSION['password'] = $psw['user_pass'];
     }
  }   
}
//Проверка сессионых переменных, если нет, вывод формы авторизации.
if(!isset($_SESSION['login']) or $login != $_SESSION['login'] or $pass != $_SESSION['password'] or $_SESSION['status'] !="admin" or $_SESSION['status'] !="moder"){
?>
<div align="center">
 <a href="../index.php">Вернуться на главную сайта</a>
  <form action='index.php' method='post'>
   Логин:&nbsp;<input type='text' name='login' value=''><br>
   Пароль:<input type='password' name='pass' value=''><br>
   <input type='hidden' name='auth' value='yes'>
   <input type='submit' value='Вход'>
  </form>
</div>
<?php
  
die;
}
?>  

Вроде бы все переменные существуют, а вот почему-то постоянно вкл. файл access.php
хотя по идее должен пропускаться после проверки.
P.S. К стати защитит ли такая обработка пользовательского ввода от SQL инъекции??
Заранее благодарю.
P.P.S.
Система авторизации строилась на примере вашей гостевой.

   

Сообщения:  [1-2] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования