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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: "Авторизация" посмотрите на уязвимости...
 
 автор: FoMa   (14.06.2005 в 12:15)   письмо автору
 
 

Посмотрите есть ли ошибки в коде, которые могут вызввать последствия...
Фаил S1.txt содержит шапку хтмл документа, а S2.txt - форму с логином и паролем (и конец хтмл документа)

<?
if (empty($_POST['Login']) || empty($_POST['pass']))
{
  include 
"S1.txt";
  ECHO (
"Введите имя и пароль");
  include 
"S2.txt";
  exit;


$login=$_POST['Login'];
$login=substr ($login010);
$login=htmlspecialchars($login);
$pass=$_POST['pass'];
$pass=substr ($pass015);
$pass=htmlspecialchars($pass);

include 
"dbconfig.php";

$test=mysql_query("select 'pass' FROM 'users' WHERE name = '".$login."'");
$t=mysql_fetch_array($test);
If (!
$t)
{
  include 
"S1.txt";
  print(
"<font color=red size=3>Введенное вами имя не существует</font>");
  include 
"S2.txt";
  exit;
}
elseif (
$t['pass']==$pass)
{
  
session_start();
  
$_SESSION['authorized'] = true
  
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; 
  
header("Location: http://sarver.ru/bla-bla.php");
  exit;
}
else
{
include 
"S1.txt";
echo (
"Пароль неверен");
include 
"S2.txt";
}
?>

   
 
 автор: cheops   (14.06.2005 в 18:51)   письмо автору
 
   для: FoMa   (14.06.2005 в 12:15)
 

В принципе, конечно, поля здорово урезаны при помощи функции substr, но я бы рисковать не стали и добавил бы строки
<?php
  
if (!get_magic_quotes_gpc())
  {
    
$login mysql_escape_string($login);
    
$pass mysql_escape_string($pass);
  }
?>


http://www.softtime.ru/info/articlephp.php?id_article=35

   
 
 автор: FoMa   (15.06.2005 в 13:37)   письмо автору
 
   для: cheops   (14.06.2005 в 18:51)
 

я читал что вообще магические кавычки следует отключать... а вместо них пользоваться не "mysql_escape_string" а более продвинутой ее формой -
mysql_real_escape_string
это так?

   
 
 автор: cheops   (15.06.2005 в 20:57)   письмо автору
 
   для: FoMa   (15.06.2005 в 13:37)
 

Эти функции различаются тем, что mysql_real_escape_string дополнительно к mysql_escape_string экранирует ещё и % и _, в принцие в плане безопасности это не смертельно, можно использовать как первый, так и второй вариант. Отключение магических кавычек лежит в ведении администрации хостинга, которая не спешит их отключать, так как многие разработчики не используют этих функций в своих скриптах.

   
 
 автор: Саня   (15.06.2005 в 14:34)
 
   для: FoMa   (14.06.2005 в 12:15)
 

По поводу пароля. Я бы сделал так:

<?
$pass
=sha1(md5(crypt($_POST['pass'], $_POST['Login'])));
// Если не нужна особая секретность, можно так:
$pass=md5($_POST['pass']);
?>

И в базе хранил бы шифрованные пароли.
И не стоит ограничивать размер пароля (разве что до 40 символов).

   
 
 автор: FoMa   (15.06.2005 в 15:23)   письмо автору
 
   для: Саня   (15.06.2005 в 14:34)
 

Еще вопрос про функцию "str_replace" можно ли сделать чтобы она за раз просматривала несколько символов? (може быть ее "аналог " - "preg_replace")
Или для удаления каждого знака каждый раз повторять конструкцию str_replace...?

   
 
 автор: FoMa   (15.06.2005 в 16:59)   письмо автору
 
   для: FoMa   (15.06.2005 в 15:23)
 

Да и еще,я тут подумал ведь проверять пароль на вводимые вимволы не обязательно - достаточно его просто зашифровать тем же md5...

   
 
 автор: Саня   (15.06.2005 в 18:26)
 
   для: FoMa   (15.06.2005 в 15:23)
 

<?
$text
="Всякая ерунда, с, запятыми.";
$new=str_replace(","""$text);
echo (
$new);
?>

Результат - "Всякая ерунда с запятыми."

   
 
 автор: FoMa   (18.06.2005 в 15:20)   письмо автору
 
   для: Саня   (15.06.2005 в 18:26)
 

Еще вопрос по безопасности... я добавил в код еще строку $_SESSION['name_user']=$login;
которая как несложно догадаться указывает на имя пользователя... исходя из этого имени на других страницах идут все запросы к mySQL, вопрос:
может ли пользователь изменить этот параметр и если может как этого избежать?! Ведь если в кажетве $_SESSION['name_user'] он укажет чужое имя он (исходя из того как я ставлю запросы) получит все права не своего пользователя..

<?
elseif ($t['pass']==$pass)
{
  
session_start();
  
$_SESSION['avtoriz'] = true
  
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; 
  
$_SESSION['name_user']=$login;
  
header("Location: http://.....php");

}
?>

   
 
 автор: Gush   (18.06.2005 в 20:33)
 
   для: FoMa   (18.06.2005 в 15:20)
 

Я, в добаление к описанному выше, генерирую при входе временный пароль - случайный набор символов и пишу его в куки пользователю. В переменных сессии храню хэш этого временного пароля и хэш составной строки $_SERVER['REMOTE_ADDR']. $_SERVER['USER_AGENT'].session_id() .
Перехват переменных сессии в этом случае ничего не даст, т.к. кукис с временным паролем хранится на машине клиента и проверяется его хэш.

   
Rambler's Top100
вверх

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