Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2010, 21:35   #11
dekameron
Форумчанин
 
Аватар для dekameron
 
Регистрация: 27.04.2010
Сообщений: 185
По умолчанию

PHP код:
if(isset($_POST['auth_ok'])){..... 
Разве не заметно, что это именно сама процедура установки кукис, сессионных переменных и т.д.
Сама проверка авторизован или нет выглядит так
PHP код:
<?
if(isset($_SESSION['id']) && !empty($_SESSION['id']) && isset($_SESSION['pass']) && !empty($_SESSION['pass'])){
    
$id=(int)($_SESSION['id']);
    
$pass=check($_SESSION['pass']);
    
$quser=mysql_query("SELECT * FROM `users` WHERE id = '$id' AND pass = '$pass' LIMIT 1;")or die(mysql_error());
    if(
mysql_num_rows($quser)!=0){
        
$user=mysql_fetch_array($quser);
        
$id=$user['id'];
        
$login=$user['login'];
        
$pass=$user['pass'];
    }elseif(isset(
$_COOKIE['id']) && !empty($_COOKIE['id']) && isset($_COOKIE['pass']) && !empty($_COOKIE['pass'])){
        
$id=(int)($_COOKIE['id']);
        
$pass=check($_COOKIE['pass']);
        
$quser=mysql_query("SELECT * FROM `users` WHERE id = '$id' AND pass = '$pass' LIMIT 1;")or die(mysql_error());
        if(
mysql_num_rows($quser)!=0){
            
$user=mysql_fetch_array($quser);
            
$id=$user['id'];
            
$login=$user['login'];
            
$pass=$user['pass'];
        }else{
            unset(
$id);
            unset(
$login);
            unset(
$pass);
            unset(
$_SESSION['id']);
            unset(
$_SESSION['pass']);
            unset(
$_SESSION['login']);
        };
    }else{
        unset(
$id);
        unset(
$login);
        unset(
$pass);
        unset(
$_SESSION['id']);
        unset(
$_SESSION['pass']);
        unset(
$_SESSION['login']);
    };
}elseif(isset(
$_COOKIE['id']) && !empty($_COOKIE['id']) && isset($_COOKIE['pass']) && !empty($_COOKIE['pass'])){
    
$id=(int)($_COOKIE['id']);
    
$pass=$_COOKIE['pass'];
    
$quser=mysql_query("SELECT * FROM `users` WHERE id = '$id' AND pass = '$pass' LIMIT 1;")or die(mysql_error());
    if(
mysql_num_rows($quser)!=0){
        
$user=mysql_fetch_array($quser);
        
$id=$user['id'];
        
$login=$user['login'];
        
$pass=$user['pass'];
        
$_SESSION['id']=$id;
        
$_SESSION['login']=$login;
        
$_SESSION['pass']=$pass;
    }else{
        unset(
$id);
        unset(
$login);
        unset(
$pass);
        unset(
$_SESSION['id']);
        unset(
$_SESSION['pass']);
        unset(
$_SESSION['login']);
    }
}else{
        unset(
$id);
        unset(
$login);
        unset(
$pass);
        unset(
$_SESSION['id']);
        unset(
$_SESSION['pass']);
        unset(
$_SESSION['login']);
};

if(isset(
$id)){
    
setcookie('login',$login,$time+3600*24*365,'/');
    
setcookie('id',$id,$time+3600*24*365,'/');
    
setcookie('pass',$pass,$time+3600*24*365,'/');
}
?>
Теперь по поводу функции фильтрации:
1. Виталий Желтяков, возможно, я только учусь. Покажите плиз пример опасной строчки, которую пропустит эта функция.
И, если не жалко , покажите свои методы фильтрации данных

P.S. Что значит по черному списку? :-[
2. mv28jam, Прежде, чем писать, чтоит хоть чуток задуматся
Цитата:
//Не знаю, как подшаманить, чтобы вывело (&_#39; (без подчеркивания)), а не сразу символы, но суть ясна
}
Можно было бы и самому догадаться, что форум тоже фильтрирует данные и поэтому заменил & # 3 9 ; на соответствующий символ
Цитата:
$message=str_replace("","", $message);
ХИТ всех времён и народов!
как раз символ & # 3 9 ;() или одинарная кавычка была полностью удалена из текста.

Что я, по вашему, должен делать в цыкле?

3. Johnatan, молитвы, порчи, предсказания, благословения работают только у тех, кто живет лицензионную версию жизни ))
По делу: вы бы конкретней написали хоть в общих чертах, что не так, или если неправильный сам метод, тоописать концепцию правильного, а то из
Цитата:
Мне Вас искренне жаль. Молюсь богам программеров, чтобы вы больше так не делали.
без подтверждения своих слов выплывает, что ктото мудазвон
Помог - тырк на весы
dekameron вне форума Ответить с цитированием
Старый 01.08.2010, 19:28   #12
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Цитата:
Тут проверка по белому списку, а надо использовать черный, т.к. взломщик может использовать различные спецсимволы.
Извеняюсь, попутал. У Вас наоборот проверка по черному списку, а надо по белому.
Белый список - это фильтрация по разрешенным символам, т.е. пропускаем только разрешенные символы.
Черный список - это фильтрация по запрещенным символам, как у Вас.
На практике необходимо запрещать все символы кроме разрешенных (по белому списку), т.к. взломщик может обнаружить символы, которые вы не запретили и воспользоваться ими или воспользоваться различными кодировками.
В вашем примере в общем всё правильно, только надо при неверной авторизации очищать куки и из php и через js, так как FF глючить в этом вопросе.
Я лично использую следующую функцию фильтрации данных:
PHP код:
//--------------------- Процедура обработки получаемых данных ----------------//
function checkrequest($textrequest) {
    
// Преобразуем кодировки текстовых данных
    
$textrequest iconv("UTF-8""WINDOWS-1251"$textrequest);
    
// Удираем лишние пробелы
    
$textrequest trim($textrequest);
    
// Фиксируем атаки
    
if (preg_match("/script|http|<|>|<|>|SELECT|UNION|UPDATE|AND|exe|exec|INSERT|tmp/i",$textrequest)) {
        
writelog('hack'date("y.m.d H:m:s")."\t".$_SERVER['REMOTE_ADDR']."\t".$textrequest);
        
// Очищаем опасный запрос
        
$textrequest '';
    }
    
// Очищаем опасные запросы
    
if (preg_match("/[^(\w)|(А-Яа-я-&=.,@():;)|(\s)]/",$textrequest)) {
        
$textrequest '';
    }
    
// Проеряем включенны ли магические ковычки
    // Есл выключенны, то экранируем ковычки
    
if ((!get_magic_quotes_gpc()) && (!is_numeric($textrequest))) {
        
$textrequest mysql_real_escape_string($textrequest);
    }

    return 
$textrequest;
}
//----------------------------------------------------------------------------// 
writelog - моя функция записи данных в лог
Виталий Желтяков вне форума Ответить с цитированием
Старый 02.08.2010, 06:34   #13
dekameron
Форумчанин
 
Аватар для dekameron
 
Регистрация: 27.04.2010
Сообщений: 185
По умолчанию

Виталий Желтяков спасибо за функцию и совет,
а по поводу чистки печение и т.д., в первый раз выложил именно обработку запроса при нажатии кнопки "Вход".
Постоянная проверка на наличие авторизации уже на второй странице (т.е. на этой )

Насчет кукис, их удаление дописал при постоянной проверке, там где удаляются переменные сессии при неверной комбинации логин/пароль)
Спасибо
Помог - тырк на весы
dekameron вне форума Ответить с цитированием
Старый 06.08.2010, 02:45   #14
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Цитата:
Сообщение от dekameron Посмотреть сообщение
без подтверждения своих слов выплывает, что ктото мудазвон
Простите, какие слова я должен подтвердить, чтобы не быть мудазвоном? То, что я молюсь богам? Или что? Какое подтверждение вам нужно? Священный бит я вам не отдам. Библию программиста можете сами купить в любом книжном магазине, она вам очень нужна. Может вам нужна кара небесная, чтобы вы убедились, что мои мольбы не пропали даром? Вы, господин нехороший, очень странно выражовываетесь.

И вот чтобы совсем очистить свою совесть и знать, что мудазвон из нас двоих уж точно не я: одной только строки $pass=$_COOKIE['pass']; достаточно, чтобы сделать из вашей базы манную кашу.

Edited: привет модрасторам! хахахахахаха
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?

Последний раз редактировалось Johnatan; 06.08.2010 в 02:49.
Johnatan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа на С++. Покритикуйте код, будьте добры)) iehf Помощь студентам 9 30.03.2010 15:02
Подскажите по авторизации Rock'n'rolla Работа с сетью в Delphi 3 22.01.2010 19:21
Вопрос по авторизации Anatol_rus Работа с сетью в Delphi 2 15.10.2009 16:20
Окно авторизации HAMMAN Помощь студентам 2 13.05.2008 11:58