powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Вопрос аутентификации
21 сообщений из 21, страница 1 из 1
Вопрос аутентификации
    #32263215
Фотография Антон Ковалев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно сделать на удалённом сервере закрытую папку, и установив соединение с ней один раз посылать запросы к PHP-скриптам находящимся в ней.
Какой самый(один из) безопасный способ передачи login/password ?
...
Рейтинг: 0 / 0
Вопрос аутентификации
    #32263258
MrGreeN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IMHO
session+md5+хеши в базе, а доступ к таблице через процедуру (от овнера)
...
Рейтинг: 0 / 0
Вопрос аутентификации
    #32263297
Фотография Антон Ковалев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>2MrGreeN
session+md5+хеши

А можно об этом по подробней, никогда не пользовался ни чем из вышеперечисленного, ибо с ПХП недавно познакомился...
...
Рейтинг: 0 / 0
Вопрос аутентификации
    #32263340
MrGreeN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сессии - механизм временного хранения значения переменных скрипта в файле на сервере (по одному файлику на каждую сессию пользователя :)...) подробнее по ссылке (на том же сайте и про md5 найдёшь)
http://ua.php.net/manual/ru/ref.session.php
md5 - алгоритм хеширования (ф-ция md5($string)) ... правда говорят что есть технологии и поновее...
хеширование- "шифрование в оду сторону" - расшифровке практически (кроме метода тупого перебора) не поддаётся (вот эти то значения и храни в базе, и с ними сравнивай хеш проля введенного пользователем)...
Но вообще чем нестандартней будет подход к этому делу тем лучше...смотри сам...
...
Рейтинг: 0 / 0
Вопрос аутентификации
    #32263380
Фотография Антон Ковалев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>2MrGreeN
вот эти то значения и храни в базе, и с ними сравнивай хеш проля введенного пользователем

Большое спасибо, но вопрос в том, что пользователь введёт пароль ,например,
в форме , а в каком виде он долетит до ПХП-скрипта ?
...
Рейтинг: 0 / 0
Вопрос аутентификации
    #32263491
MrGreeN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В начальной, а уж скрипт преобразует в хеш, и этот хеш сравнит с существующим в таблице НО заметь, если у тебя пароль в сессии, то в течении сессии с клиентским браузером по сетке он гонится ТОЛЬКО ОДИН РАЗ при её создании (сессии в смысле), т.е. дальше значения берутся из сессионного файла на серваке и отрабатываются там-же, т.е. рискуем только один раз...
А хеш нужен для того, чтобы какой нибудь зловещий хацкер пробравшись в базу и сперев данные таблицы после этого долго над ними плакал (т.к. там всего лишь хеш)...
Да, и в базе сделай процедуру, чтобы она проверяла пароль а не скрипт...чтобы не давать прямой доступ из нета к таблице с паролями
Существует тогда два споба чего-то напакостить
- модификация скрипта
- прослушка всего трафика с целью выделить исходную комбинацию пароля (которая посылается всего-лишь один раз)...

:-))
Но надеемся на лучшее а готовимся к худшему...Т.е. бэкап, резервный сервак..если не поможет - вертолёт на крыше, подводная лодка...если не поможет - пуля собственной рукой в висок как русскому офицеру , или харакири как самураю...
Дерзайте, удачи вам....
...
Рейтинг: 0 / 0
Вопрос аутентификации
    #32263859
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> session+md5+хеши в базе
+ https :)
Я в последнее время перешел на sha1 - его сложнее взломать перебором.

В общем случае скрипты выглядят так:
<?
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$login = addsashes($_POST['login']);
$password = md5($_POST['password']);
$res = mysql_query("SELECT * FROM my_users WHERE login = '$login' AND password = '$password'");
if (mysql_num_rows($res) == 1) {
// пользователь с такой парой логин/пароль найден
session_name('sid');
session_start();
$_SESSION['login'] = $login;
$_SESSION['time'] = time();
// пересылаем пользователя в закрытую часть сайта
header("Location: http://server.ru/secure/user.php?".SID);
exit;
}
/// здесь показіваешь форму
....
?>

В скриптах закрытой части просто проверяешь:
<?
session_name('sid');
session_start();
if (empty($_SESSION['login'])) {
/// юзер не прошел авторизацию
session_destroy();
die("access denied");
}
... //дальше твой скрипт
?>

Написал примерно, так как сам давно перешел на pear::auth (http://pear.php.net);

2 MrGreen
А какие преимущества в создании процедуры ? (я не говорю что это плохо, но и преимуществ особых не вижу).
...
Рейтинг: 0 / 0
Вопрос аутентификации
    #32263955
MrGreeN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну начнём с того, что хранимые процедуры побыстрее будут (всё-таки компиленые уже), но в данном случае роли это большой не играет...:)
Дело в том что закрывая прямой доступ к таблицам мы избавляемся от проблем при следующей ситуации
скрипт модифицирован....тогда select *from Mytab_with_posswords выложит нам всё на блюдечке....
а вот закроем доступ напрямую, тогда модифицируй, не модифицируй скрипт а хоть чего-то добиться от хотимой таблицы без выполнения процедуры мы не сможем (а в процедуре только проверка на присутствие в таблице, т.е. ответ Y/N), и тогда хацкеру остаётся только перебор...
я не беру случай когда злоумішленик получил доступ и к скрипту и к базе - это без вариантов...
1) Защита скриптов средствами веб сервера (и операционки)
2) Защита средствами операционки сессионных файлов
3) Защита скуль сервером базы
и наконец SSL от прослушки....AFAIK вполне достаточно для безопасности....
Если где-то просчитался прошу ткнуть пальцем (если без матов то я не против)
P.S. Я не помешан на безопасности - просто написать процедуру из семи строчек несложно, да и в скрипте вызвать её тоже...а эфект по-моему от этого есть...
...
Рейтинг: 0 / 0
Вопрос аутентификации
    #32264154
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько я понимаю ты про MS SQL пишешь (я с ним только понаслышке знаком)
1. А можно тесты на скорость посмотреть, насколько
$stmt = mssql_init(....);
mssql_bind(....);
mssql_bind(....);
mssql_execute(....);
быстрее чем
mssql_query("SELECT * FROM my_users WHERE login = '$login' AND password = '$hashed_password'");

2. Не очень понял, что понимается под фразой
> а вот закроем доступ напрямую

Что значит закрыть доступ ? Просто не писать запрос в скрипте "SELECT * FROM my_users ..." или создать таблицу под другим пользователем, с другими правами чем у юзера, который коннектится из php-скрипта ?

Кстати если уж ты боишься, что хакер получит доступ к скрипту (может его отредактировать) и решил так от этого защититься, то глянь на такую ситуацию:
хакер получил доступ к скрипту, и отредактировал его - сделал лог всех POST запросов и результатов авторизаций (пройдена / не пройдена) и этот лог пишется где-нибудь в /tmp чтобы он не так был заметен.
Через пару часов смотрит лог и вытаскивает из него данные по успешным авторизациям.
Это я к тому что если хакер получил доступ к редактированию скриптов - уже ничего не спасет.
...
Рейтинг: 0 / 0
Вопрос аутентификации
    #32264395
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$login = addsashes($_POST['login']);
$password = md5($_POST['password']);
$res = mysql_query( "SELECT * FROM my_users WHERE login = '$login' AND password = '$password'" );
if (mysql_num_rows($res) ==  1 ) {
// пользователь с такой парой логин/пароль найден
session_name('sid'); 


Так нельзя. Так определенно нельзя... Первое правило безопасного секс^H^H^H^Hпрограммирования - никогда не доверяйте пользовательскому вводу..

А если пользователь введет, скажем, в поле login

ivanov' or '1'='1

то в результате получите выражение

Код: plaintext
1.
  SELECT * FROM my_users WHERE login = 'ivanov' or '1'='1'  AND password = 'тут все равно что'


И хоть тыщщу раз захешируйте пароль - все равно хакер пролезет.. Пожалуйста не забывайте

1) применять регулярные выражения (ereg() например), чтобы извлечь данные из пользовательского ввода
2) когда делаете запрос - используйте mysql_escape_string тобы заэкранировать все символы типа '
...
Рейтинг: 0 / 0
Вопрос аутентификации
    #32264431
Фотография ScableR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут очень много подводных камней и за просто так нормальную систему безопасности новичку не создать. Всё равно где-то да будет дыра. Кто-бы что бы не говорил. Что до дешифровки хэша, то на эту тему можно много спорить. Тут если хакер получил рутовские права по доступу к БД, то ему эти хэши как-то до лампочки становяться. Стоит только поменять значение с 81dc9bdb52d04dc20036dbd8313ed055 на 202cb962ac59075b964b07152d234b70 (это, если мне память не изменяет 1234) то всё. Он тут главный. Соответственно ежели пароли к БД храняться в файлике в обычном виде, то их можно умудриться и спереть.

2Хрен:
> Пожалуйста не забывайте

> 1) применять регулярные выражения (ereg() например), чтобы
> извлечь данные из пользовательского ввода
> 2) когда делаете запрос - используйте mysql_escape_string тобы
> заэкранировать все символы типа '

Это вообще нафига? А во 2-м пункте я вообще не вижу смысла. Зачем разрешать пользователю делать пароли с применением системных или иных специальных символов? То есть, если он всунет там вообще знак переноса то ты его конвертанешь в <br>? И будет пароль roma<br>lox, причем опять таки тэги! И опять конвертить из < в &.l.t(точки, чтобы форум не конвертанул)? Это перебор. Просто надо запрешать полльзователю ввод иных символов кроме цифр и латиницы.
...
Рейтинг: 0 / 0
Вопрос аутентификации
    #32264464
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хрен
1. я показал лишь алгоритм авторизации на сессиях, а не готовый скрипт
2. что делает addslashes() рассказать или сам в мануале прочитаешь ?
...
Рейтинг: 0 / 0
Вопрос аутентификации
    #32264473
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати запрос типа
SELECT * FROM my_users WHERE login = 'ivanov' or '1'='1' AND password = 'тут все равно что'
ничего не дал бы из-за строки
if (mysql_num_rows($res) == 1) {
...
Рейтинг: 0 / 0
Вопрос аутентификации
    #32264539
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quote]
А во 2-м пункте я вообще не вижу смысла. Зачем разрешать пользователю делать пароли с применением системных или иных специальных символов? То есть, если он всунет там вообще знак переноса то ты его конвертанешь в <br>? И будет пароль roma<br>lox, причем опять таки тэги! И опять конвертить из < в &.l.t(точки, чтобы форум не конвертанул)?
[/quote]

mysql_escape_strin() делает совсем не то.. RTFM

[quote]
кстати запрос типа
SELECT * FROM my_users WHERE login = 'ivanov' or '1'='1' AND password = 'тут все равно что'
ничего не дал бы из-за строки
if (mysql_num_rows($res) == 1) {
[/quote]

Если ivanov - один в базе - получишь именно 1 запись.

[quote]
1. я показал лишь алгоритм авторизации на сессиях, а не готовый скрипт
2. что делает addslashes() рассказать или сам в мануале прочитаешь ?
[/quote]

Все, все, вопрос снимется. Ты прав. addslashes() я просто не увидел, когда смотрел на код.
...
Рейтинг: 0 / 0
Вопрос аутентификации
    #32264807
MrGreeN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С мнением, что нет абсолютной защиты я согласен полностью - всегда надо создавать резерв для быстрого восстановления...и не потому что кто не хацкер, тот плохой программер - просто, по определению, "ломать - не строить"
2Mакс
Ответить на вопрос насчёт скорости не могу, т.к. разницу всё равно не ощутил бы (писал для внутренних нужд, и записей там с паролями чуть более сотни, да и сетка 100мб)...а так "на лету" могу только порассуждать...но тут ещё не понятна технология совместной работы скуля с пхп (вот тут и может скорость упасть, и запрос будет быстрее)...
А насчёт select *from ... если говорить за мсскуль, то там такой запрос при отсутствии прав просто не прокатит, получим Access denided да и все...

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

2ScableR
Тут понятно (насчёт модификации записей в таблице на хеш 1234)...но если такое произошло - админа стрелять надо, т.к. модифицировать может только он и в монопольном режиме (т.е. удалённо не получится никак)...а вот просмотреть может каждый (почти) скрипт и процедура ( давать права то на чтение им всё равно надо)....вот от такого хеш и помогает (толку хацкеру от спёртого списка хешей)

P.S. Если угонщик имеет ключи, то вся безопасность до одного места...
...
Рейтинг: 0 / 0
Вопрос аутентификации
    #32265282
Фотография ScableR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Хрен:
[quote]
А во 2-м пункте я вообще не вижу смысла. Зачем разрешать пользователю делать пароли с применением системных или иных специальных символов? То есть, если он всунет там вообще знак переноса то ты его конвертанешь в <br>? И будет пароль roma<br>lox, причем опять таки тэги! И опять конвертить из < в &.l.t(точки, чтобы форум не конвертанул)?
[/quote]

mysql_escape_strin() делает совсем не то.. RTFM

Ещё раз перечитай то, что я там написал. Может до тебя что-то да и дойдет.... Хотя.... Хрен до хрена что дойдет.
...
Рейтинг: 0 / 0
Вопрос аутентификации
    #32268476
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ScableR:

>>mysql_escape_strin() делает совсем не то.. RTFM

>Ещё раз перечитай то, что я там написал. Может до тебя что-то да и >дойдет.... Хотя.... Хрен до хрена что дойдет.

Тормозишь опять? Какие <br>, какие &.l.t.; ? Прочитай что делает mysql_escape_string(), не поленись.. Не дойдет - поробуй руками запусти, посмотри результат..

отностиельно того, что на личности переходишь - ну чтож, значит такой твой уровень..
...
Рейтинг: 0 / 0
Вопрос аутентификации
    #32268542
plankton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
народ я понимаю, что лезу не в своё дело и в этом не фига не понимаю.
но вот скриптец тот что
Код: plaintext
1.
2.
3.
$password = md5($_POST['password']); 
$res = mysql_query( "SELECT * FROM my_users WHERE login = '$login' AND password = '$password'" ); 
if (mysql_num_rows($res) ==  1 ) { 

Я видел в книге. и точно так же получилось типа если это равно 1, то это если нет, то вот другое. И я не понял почему нельзя сделать другим методом. ну что-то вроде
Код: plaintext
1.
2.
3.
4.
5.
6.
$query =  "SELECT user_passw FROM my_users WHERE user_login='".$login."'" ;
$result = mysql_query($query);
$row = mysql_fetch_row($result);
if ($row[ 0 ] != $passw): print  "Пароль не верный" ;
 else:
 ботва всякая.

ну то есть чел после ввода нажимает на кнопку в форме, там через post идёт переменная $login ну и тд.

почему так нельзя и чем это плохо?

ps. если уж вопрос совсем глупый, можете не отвечать. :)
...
Рейтинг: 0 / 0
Вопрос аутентификации
    #32268740
MrGreeN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот это
$row = mysql_fetch_row($result);
считывает в массив строку с результатами и передвигает её дальше...
следовательно если результат запроса будет нулевым то ф-ция выдаст ошибку
а вот этим
if (mysql_num_rows($result) == 1)
мы проверяем существует ли результат и (что самое главное) один ли он (если их два или более - опасность)
а дальше пожалуйста делай
$row = mysql_fetch_row($result);

if ($row[0] != $passw): print "Пароль не верный";

else:

ботва всякая.
...
Рейтинг: 0 / 0
Вопрос аутентификации
    #32269873
Фотография alienzzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Я полностью согласен с тем , что без сесий не обойтись -)
2. Если количество паролей не большое, то можно прям в сессию загнать пароль, предварительно его схешировав. типа не такая строчка
if $vUserPassword = 'MayPassword'
а типа if $vUserPassword = crypt('dfjklhgkjghdjkdgjkh')
или мд5 не важно

Почему такое не устраивает.

А насчет хранимый процедур, то если разговор идет за MYSQL, то если мне не изменяет память их там нет =)))))))

Если мы говорим про MYSQL, то конечно мы делаем табличку, которую могут все читать, а пароли хешируем и мд5типуем =)))))

И главное это мне кажеться сделать классы, положить их в папку, куды никто попасть не может и делать что-то типа такого if cSecurityClass -> TestPass($vLogin,vPassword) {}

Если я ошибся в коде (в синтаксисе), то не обесутте, я на пхп уже давно не программил =( все больше на PowerBuildere, но я исправлюсь честно
...
Рейтинг: 0 / 0
Вопрос аутентификации
    #32269931
MrGreeN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Alienzzzz
>их там нет
нет, а в MS есть :-))
по этому делать чего-то типа
> if cSecurityClass -> TestPass($vLogin,vPassword) {}
не обязательно
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Вопрос аутентификации
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]