максимум безопасности...

fresh!

Guest
максимум безопасности...

Проверьте плиз код, и можно ли его обойти?

if(!empty($action) and $action == "exit"){
$expt = time()+60*60*24*30;
setcookie('login_zon', '', $expt, '/', '.****.ru');
setcookie('pass_zon', '', $expt, '/', '.****.ru');
setcookie('login_zon', '', $expt, '/', '****.ru');
setcookie('pass_zon', '', $expt, '/', '****.ru');
session_destroy();
header("location: http://****.ru/");
}
if(!empty($login) and !empty($pass)){
$query = "select * from ".$tbl['users']." where login = '".$login."' and pass = '".$pass."' and block != '1'";
$result = db_query($query);
if(db_num_rows($result) != 0){
$row = db_fetch_array($result);
$_SESSION['user_id'] = $row['id']; // отметка о логине
$_SESSION['user_auth'] = 1; // отметка о логине
$_SESSION['user_login'] = $row['login'];
$_SESSION['user_pass'] = $row['pass'];
$_SESSION['user_name'] = $row['name'];
$_SESSION['rights'] = unserialize($row['rights']);//поле с правами юзера
if(!is_array($_SESSION['rights'])){
$_SESSION['rights'] = array("");
}
if(in_array("l", $_SESSION['rights'])){
// и заводим сессию для входа админа йёпт
$_SESSION['admin'] = 1;
}
if(!empty($remember_me)){
//echo "adad";
// если авторизация на всегда то ставим куки
$expt = time()+60*60*24*30;
$lgn = my_crypt($login, $db['pass'], 1);
$pwd = my_crypt($pass, $db['pass'], 1);
setcookie("login_zon", $login = $lgn, $expt, "/", ".****.ru");
setcookie("pass_zon", $pass = $pwd, $expt, "/", ".****.ru");
header("location: http://****.ru/");
} else {
$expt = time()+60*15;
$lgn = my_crypt($login, $db['pass'], 1);
$pwd = my_crypt($pass, $db['pass'], 1);
setcookie("login_zon", $login = $lgn, $expt, "/", ".****.ru");
setcookie("pass_zon", $pass = $pwd, $expt, "/", ".****.ru");
header("location: http://****.ru/");


Очень важно... спасибо...
 
if(!empty($login) and !empty($pass)){
$query = "select * from ".$tbl['users']." where login = '".$login."' and pass = '".$pass."' and block != '1'";

Через этот скрипт можно получить логины и пароли всех пользователей системы :)
 

fresh!

Guest
интересно каким способом?

-~{}~ 13.07.05 05:02:

как тогда можно по другому зделать прверку введённого логина и пароля?! ............
 

fresh!

Guest
а точнее, ну у меня режуца слешы, и регистер глобалс настроены, то что...

А как тогда подругому зделать прверку авторизации, других путей я не вижу :)
 

SiMM

Новичок
> а точнее
Ссылки для ознакомления уже были даны. Там же написано, где можно прочесть про SQL injection (да и в гугле ввести это ничто не мешает).

> и регистер глобалс настроены
А они всегда так или иначе нестроены.
 

fresh!

Guest
$query = "select * from ".$tbl['users']." where login = '".mysql_real_escape_string($login)."' and pass = '".mysql_real_escape_string($pass)."' and block != '1'";


register_globals = off

Это обеспечит безопасность?

-~{}~ 13.07.05 10:03:

или лучше stripslashes ?
 

SibProgrammer

Новичок
Автор оригинала: Алексей Пешков Через этот скрипт можно получить логины и пароли всех пользователей системы :)
Имхо, не всегда.

Предположим, что переменная $login содержит проэскейпенные кавычки (так ли это на самом деле - это другой вопрос).
Тогда в запрос вида WHERE login='$login' внедрить другие SQL-инструкции не получится. Т.к. нам надо закрыть открывающуюся кавычку, а переменная $login содержит только проэскейпенные кавычки.
 

lucas

Guest
$query = "select * from ".$tbl['users']." where login = '".mysql_real_escape_string($login)."' and pass = '".mysql_real_escape_string($pass)."' and block != '1'";


register_globals = off
1. Судя по запросу, register_globals совсем не off.

2. Что с настройками magic_quotes_gpc, magic_quotes_runtime, magic_quotes_sybase?
 

fresh!

Guest
function check_str($str){
return preg_replace("/[^\x20-\xFF]/","",@strval($str));
}
$login = check_str($_POST['login']);
$pass = check_str($_POST['pass']);
$pass = addslashes($pass);

плюс каждая страница проверяеца этим:
function check_request($str){
$str = check_str($str);
$str = str_replace ("'", "", $str);
$str = str_replace ('"', '', $str);
return $str;
}
function url_request($url){
global $c;
if((strpos($url, "\"")==false)&&(strpos($url, "'")==false))
{
$url = check_request($url);
$url = explode("?", $url);
$url = $url['0'];
if(substr($url, 0, 1) == "/") $url = substr($url, 1);
if(substr($url, -1) == "/") $url = substr($url, 0, strlen($url)-1);
if($url == "") $url = $c['index_url'];
return $url;
}
else {
echo "<center>Доступ запрещён</center>";
exit;
}
}

что скажите?

-~{}~ 13.07.05 11:18:

а кто сейчас при register_globals = on работает?
таких мало...
magic_quotes_gpc, magic_quotes_runtime, magic_quotes_sybase
Эти параметры не выставлены :)
 

fresh!

Guest
так собственно к теме..
как можно обойти, и как лечить?

-~{}~ 13.07.05 11:36:

2lucas а если ты на хостинге сидишь, и када ты попросишь ихней пхп инфо они тебя пошлют...

если прописывать в .htacess
то скажи какие значения нужно поставить
 

lucas

Guest
если ты на хостинге сидишь, и када ты попросишь ихней пхп инфо они тебя пошлют...
Напиши phpinfo в скрипте. Там нет никакой секретнй информации.
(Если функция phpinfo запрещена -- это диагноз, меняй хостера.)

если прописывать в .htacess
то скажи какие значения нужно поставить
В факе было написано:
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off

Слешить в скрипте mysql_real_escape_string(с параметром) (для MySQL) .
 
Сверху