LINUX.ORG.RU
Ответ на: комментарий от Spoofing

фишка вот в чем - это скрипт востановления, Login и Password просто сохранены в некоторый файл. В случае чего админ может так залогинется в системе минуя базу данных и обратившись к скрипту.

Но не может ли злоумышленник подсунуть в GET запросе, что-то что позволит пройти проверку? Не знаю, что-то типа eval('?>'.${Login})

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

Нет, все что сохраняется в переменных - остается переменными, какой бы это текст нибыл. Если ты сделаешь eval($_REQUEST['data']), то да, но без eval'а это всего-лишь строка, которая не интерпретируется в код.

Spoofing ★★★★★
()
Ответ на: комментарий от Suntechnic

Login и Password просто сохранены в некоторый файл.

Обязательно сделай так, чтобы этот файл не был виден пользователю, от которого запускается веб-сервер.

anonymous
()
Ответ на: комментарий от alix

До 8 символов полным перебором подбирается любая комбинация на домашнем компе, до 9 в облаке. Дальше есть гибридная атака по словарю, оченннама мошная. Длина значения не имеет. Поэтому пасс из 10+ символов полностью random (а не nbgfnfr) является достаточно надёжным вариантом для использования с md5. Если добавить соли, нагенеренные заранее радужные таблицы станут бесполезны.

anonymous
()
Ответ на: комментарий от makeB

Точнее: Online Service для некоторых видов хэшей бесплатен. Оплата не взимается для md5 следующих комбинаций:

1. Длина до 5 символов. Комбинации: [0-9a-zA-Z]
2. Длина до 6 символов. Комбинации: [a-z]
3. Длина до 8 символов. Комбинации: [0-9]

makeB
()
Ответ на: комментарий от anonymous

У меня один из пассов содержит только a-z и состоит из 12 символов, другой a-zA-Z0-9 и состоит из 16

alix ★★★★
()
Ответ на: комментарий от kernelpanic

А чего это ты так пиаришь этот сервис?

Не пиарю, а сообщаю, что мд5 не надежна, и существуют тисячи подобных сервисов, в обычных (не сложных) случаях, хакеру ваш пароль обойдется в пару центов.

makeB
()
Ответ на: комментарий от kernelpanic

Да и не ломают они, а просто держат базу со значениями.

О чем и пишут в шапке, для тех кто читать умеет.

makeB
()

тогда бы пришлось каждый иф экранировать)

trashymichael ★★★
()
Ответ на: комментарий от anonymous

Обязательно сделай так, чтобы этот файл не был виден пользователю, от которого запускается веб-сервер.

И как же тогда сервер его прочитает? Может сделать так, что бы сервер не могу его переписать и отдавать наружу?

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

Login и Password просто сохранены в некоторый файл

всегда нравились такие приколы с неизвестно кем поддерживаемыми файлами :)

<?php
require_once('LoginPassword.php');

$_REQUEST=array(
	"login" => $Login,
	"password" => $Password
);

if ($_REQUEST["login"] == $Login && $_REQUEST["password"] == $Password) {
	echo "Yeep\n";
} else {
	echo "WTF?\n";
	echo "\$Login and \$_REQUEST['login']       " . (strcmp($Login,$_REQUEST['login'])==0?"identical":"not identical") . "\n";
	echo "\$Password and \$_REQUEST['password'] " . (strcmp($Password,$_REQUEST['password'])==0?"identical":"not identical") . "\n";
}

$ php ./yeep.php Login Password
WTF?
$Login and $_REQUEST['login']       identical
$Password and $_REQUEST['password'] identical
MKuznetsov ★★★★★
()
Ответ на: комментарий от anonymous

Обязательно сделай так, чтобы этот файл не был виден пользователю, от которого запускается веб-сервер.

лолшто?

anonymous
()
Ответ на: комментарий от MKuznetsov

Не понял в чем тут прикол... Поясни пожалуйста.

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от kernelpanic

Прекрасно сломало.. Из MD5.. З.Ы. Прочие варианты шифрования не пробовал - лень

Photon79
()
Ответ на: комментарий от GateKeeper

Нет, это «нет, ты не понимаешь даже в чем дело». Ну ладно

Обязательно сделай так, чтобы этот файл не был виден пользователю, от которого запускается веб-сервер

man chmod -r `dirname /path/to/passwd.file`

Хинт: от какого пользователя будет запущен php?

goingUp ★★★★★
()

Suntechnic

Не опасен ли такой код?
Или лучше добавить проверку на какие-нибудь специальные символы в переменных?

if ($_REQUEST["login"] == $Login && $_REQUEST["password"] == $Password)

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

$_REQUEST["login"] == $Login && $_REQUEST["password"] == $Password

Результат такой оценки - True, либо False.
Опасность может возникнуть в случае передачи элементов $_REQUEST[«login»], $_REQUEST[«password»] библиотечной функции, методу класса с целью обработки.
Пример такого случая - направление запроса в адрес СУБД MySQL.

Кстати, для твоей задачи проверять факт наличия элементов 'login' и 'password' в массиве $_REQUEST не требуется?

if (!isset($_REQUEST["login"], $_REQUEST["password"])) die("Скрипту необходимо передать набор параметров!");
if ($_REQUEST["login"] == $Login && $_REQUEST["password"] == $Password) ...
Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Опасность может возникнуть в случае передачи элементов $_REQUEST[«login»], $_REQUEST[«password»] библиотечной функции, методу класса с целью обработки.

Такой ситуации не будет. Далее используются $Login и $Password. Меня интересовало не получится ли получить TRUE без знания содержимого $Login и $Password

Кстати, для твоей задачи проверять факт наличия элементов 'login' и 'password' в массиве $_REQUEST не требуется?

Конечно требуется. Я просто упростил приводимое выражение. ;)

Suntechnic ★★★★★
() автор топика
Ответ на: комментарий от Suntechnic

Может, стоит использовать оператор сравнения "===" вместо "==" ?

Suntechnic

Меня интересовало не получится ли получить TRUE без знания содержимого $Login и $Password

alex@comp:~$ cat auth.php

<?php
$ARRAY["login"] = 0;
$ARRAY["password"] = 123;

$Login = "SuperPuperUser";
$Password = "123ab";

if ($ARRAY["login"] == $Login && $ARRAY["password"] == $Password)
  echo "Аутентификация успешная!\n";
else
  echo "Доступ запрещен!\n";
?>

alex@comp:~$ php auth.php
Аутентификация успешная!

Считаю, что получить TRUE без знания содержимого $Login и $Password не удастся, если к условию применить оператор «строгое равенство с учетом типа аргументов».
Пример:

alex@comp:~$ cat auth.php

<?php
$ARRAY["login"] = 0;
$ARRAY["password"] = 123;

$Login = "SuperPuperUser";
$Password = "123ab";

if ($ARRAY["login"] === $Login && $ARRAY["password"] === $Password)
  echo "Аутентификация успешная!\n";
else
  echo "Доступ запрещен!\n";
?>

alex@comp:~$ php auth.php
Доступ запрещен!
Deleted
()

лучше так

if ($_POST['login']==$Login && sha1($_POST['password'])==$Password)

Пасс хранить в sha1. В GET-параметрах передавать логин и пасс недопустимо так как они пишутся в access.log

pascal9x
()
Ответ на: комментарий от goingUp

Хинт: от какого пользователя будет запущен php?

Неужели от рута? В иных случаях вопрос можно считать риторическим.

~> mkdir /tmp/testtest
~> echo ololo > /tmp/testtest/test.txt
~> chmod -r /tmp/testtest
~> ls -la /tmp/testtest
ls: невозможно открыть каталог /tmp/testtest: Отказано в доступе
~> cat /tmp/testtest/test.txt
ololo
~>

Скажешь, в параллельной консоли между предпоследним и последним действием подделал результаты?

Однако, пых в этом отношении делает по-пацански:

~> php -r 'print(file_get_contents("/tmp/testtest/test.txt"));'
ololo

GateKeeper ★★
()
Ответ на: комментарий от GateKeeper

А, в этом плане «не виден»? Дурацкая защита) Намного лучше хранить хеш пароля.

goingUp ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.