Безопасность скрипта

troublegum

Новичок
Безопасность скрипта

PHP:
<?
	if ($HTTP_POST_VARS["action"] == "show")
	{
		show();
	}
	elseif ($HTTP_POST_VARS["action"] == "edit")
	{
		edit ();
	}
		
	function show()
	{
		echo "show";
	}
	
	function edit()
	{
		authentication ();
		echo "edit";
	}

	function authentication ()
	{
		if (!isset($_SERVER['PHP_AUTH_USER']))
		{
    		header("WWW-Authenticate: Basic realm=\"My Realm\"");
    		header("HTTP/1.0 401 Unauthorized");
    		echo "Пожалуйста введите свой логин и пароль!\n";
    		exit;
  		}
  		else
  		{
  			if ($_SERVER['PHP_AUTH_USER'] != $user || $_SERVER['PHP_AUTH_PW'] != $password)
  			{
  				echo "Вы ввели не правильный логин или пароль!";
  				exit;
  			}
  		}
	}
?>
Господа, подскажите пожалуйста где в этом куске скрипта ошибки в безопасности. :confused:
 

kruglov

Новичок
Да вроде нигде...

А как мне второй раз попытаться пароль ввести, ежели я опечатался?

А вообще не хватает запятых, лишние пробелы...
 

troublegum

Новичок
Автор оригинала: kruglov
Да вроде нигде...

А как мне второй раз попытаться пароль ввести, ежели я опечатался?

А вообще не хватает запятых, лишние пробелы...
Спасибо, за ответ....
Хммм... да не доделка получилась в случае неправильного пароля или логина, согласен.

Тогда такой вариант функции:
PHP:
function authentication ()
	{
	
		if (!isset($_SERVER['PHP_AUTH_USER']))
		{
    		header("WWW-Authenticate: Basic realm=\"My Realm\"");
    		header("HTTP/1.0 401 Unauthorized");
    		echo "Пожалуйста введите свой логин и пароль!\n";
    		exit;
  		}
  		else
  		{
  			if ($_SERVER['PHP_AUTH_USER'] != $user || $_SERVER['PHP_AUTH_PW'] != $password)
  			{
  				header("WWW-Authenticate: Basic realm=\"My Realm\"");
    		                                header("HTTP/1.0 401 Unauthorized");
    		                                echo "Пожалуйста введите свой логин и пароль!\n";
                                        		exit;
  			}
  		}
	}
Заново выведем окно автаризации...
 

SelenIT

IT-лунатик :)
по-моему, проще объединить условия, чем дублировать код...

кроме того, приведенный здесь скрипт, вроде бы, должен пускать с пустыми логином и паролем...

ну и наконец по первому варианту - $HTTP_POST_VARS устарели, замени их на $_POST.
 

troublegum

Новичок
Автор оригинала: SelenIT
по-моему, проще объединить условия, чем дублировать код...

кроме того, приведенный здесь скрипт, вроде бы, должен пускать с пустыми логином и паролем...

ну и наконец по первому варианту - $HTTP_POST_VARS устарели, замени их на $_POST.
Нет, конечно никого он пускать не будет с пустыми логинами и паролями, т.к. переменные будут инициализированны в функции authentication() значениями из БД.

А вот насколько критично использование $HTTP_POST_VARS вместо $_POST?
 

SelenIT

IT-лунатик :)
В 5-й версии $HTTP_POST_VARS могут отключаться через настройки.
 

troublegum

Новичок
PHP:
 function check_user ($login, $password)
	{
		global $db_host, $db_user, $db_password, $db_news, $tb_prefix, $tb_news, $tb_users;
		
		if (!$link = @mysql_connect($db_host, $db_user, $db_password)) error("Произошел сбой при подключении к серверу \"$db_host\". Причина: <i>".mysql_error())."</i>";
		if (!mysql_select_db($db_news, $link)) error("Произошел сбой при подключении к БД \"$db_news\". Причина: <i>".mysql_error())."</i>";
		if (!$result = mysql_query("SELECT * FROM $tb_prefix$tb_users WHERE login=\"$login\" && password=\"$password\" LIMIT 1")) error("Произошел сбой при обращении к таблице \"$tb_prefix$tb_users\". Причина: <i>".mysql_error())."</i>";
		return (mysql_num_rows($result) == 1) ? true : false;
	}
Опять возращаюсь к вопросу о безопасности:
Можно ли так подобрать значение переменной $result в строке
PHP:
return (mysql_num_rows($result) == 1) ? true : false;
что бы check_user функция возвратила значение true? :confused:
 

Фанат

oncle terrible
Команда форума
что значит - подобрать значение переменной $result?
кто будет подбирать? программист? при написании скрипта? или что?

-~{}~ 26.07.06 18:06:

непонятно так же, почему ты коннектишься к базе в ункции проверки юзера.
у тебя обольше нигде база не используется?
 

troublegum

Новичок
Автор оригинала: Фанат
что значит - подобрать значение переменной $result?
кто будет подбирать? программист? при написании скрипта? или что?

-~{}~ 26.07.06 18:06:

непонятно так же, почему ты коннектишься к базе в ункции проверки юзера.
у тебя обольше нигде база не используется?
1.Нет, возможен ли подбор значения переменной со стороны пользователя?
2.Нет это подфункция, в процессе авторизации пользователя. Смотрим есть такой юзер или нет.
 

Фанат

oncle terrible
Команда форума
1.Нет, возможен ли подбор значения переменной со стороны пользователя?
поправь меня, если я ошибаюсь.
ты спрашиваешь, можно ли подобрать значение ПЕРЕМЕННОЙ $result, при том, что ей явно присваивается значение в строке
$result = mysql_query()
?
2.Нет это подфункция, в процессе авторизации пользователя. Смотрим есть такой юзер или нет.
если это подфункци,я то зачем ты коннкетишься в ней к мускулю?
 

wizard

Новичок
в функции authentication откуда берутся $user и $password?
Не допру никак ;)
 
Сверху