|
|
|
|
|
для: 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']."'");
?>
|
| |
|
|
|
|
|
|
| Здравствуйте помогите найти ошибку!
Вот так выгляит файл 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'>
Логин: <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.
Система авторизации строилась на примере вашей гостевой. | |
|
|
|
|