|
Вопрос аутентификации
|
|||
---|---|---|---|
#18+
Нужно сделать на удалённом сервере закрытую папку, и установив соединение с ней один раз посылать запросы к PHP-скриптам находящимся в ней. Какой самый(один из) безопасный способ передачи login/password ? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2003, 09:51 |
|
Вопрос аутентификации
|
|||
---|---|---|---|
#18+
IMHO session+md5+хеши в базе, а доступ к таблице через процедуру (от овнера) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2003, 10:24 |
|
Вопрос аутентификации
|
|||
---|---|---|---|
#18+
>2MrGreeN session+md5+хеши А можно об этом по подробней, никогда не пользовался ни чем из вышеперечисленного, ибо с ПХП недавно познакомился... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2003, 10:44 |
|
Вопрос аутентификации
|
|||
---|---|---|---|
#18+
Сессии - механизм временного хранения значения переменных скрипта в файле на сервере (по одному файлику на каждую сессию пользователя :)...) подробнее по ссылке (на том же сайте и про md5 найдёшь) http://ua.php.net/manual/ru/ref.session.php md5 - алгоритм хеширования (ф-ция md5($string)) ... правда говорят что есть технологии и поновее... хеширование- "шифрование в оду сторону" - расшифровке практически (кроме метода тупого перебора) не поддаётся (вот эти то значения и храни в базе, и с ними сравнивай хеш проля введенного пользователем)... Но вообще чем нестандартней будет подход к этому делу тем лучше...смотри сам... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2003, 11:08 |
|
Вопрос аутентификации
|
|||
---|---|---|---|
#18+
>2MrGreeN вот эти то значения и храни в базе, и с ними сравнивай хеш проля введенного пользователем Большое спасибо, но вопрос в том, что пользователь введёт пароль ,например, в форме , а в каком виде он долетит до ПХП-скрипта ? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2003, 11:28 |
|
Вопрос аутентификации
|
|||
---|---|---|---|
#18+
В начальной, а уж скрипт преобразует в хеш, и этот хеш сравнит с существующим в таблице НО заметь, если у тебя пароль в сессии, то в течении сессии с клиентским браузером по сетке он гонится ТОЛЬКО ОДИН РАЗ при её создании (сессии в смысле), т.е. дальше значения берутся из сессионного файла на серваке и отрабатываются там-же, т.е. рискуем только один раз... А хеш нужен для того, чтобы какой нибудь зловещий хацкер пробравшись в базу и сперев данные таблицы после этого долго над ними плакал (т.к. там всего лишь хеш)... Да, и в базе сделай процедуру, чтобы она проверяла пароль а не скрипт...чтобы не давать прямой доступ из нета к таблице с паролями Существует тогда два споба чего-то напакостить - модификация скрипта - прослушка всего трафика с целью выделить исходную комбинацию пароля (которая посылается всего-лишь один раз)... :-)) Но надеемся на лучшее а готовимся к худшему...Т.е. бэкап, резервный сервак..если не поможет - вертолёт на крыше, подводная лодка...если не поможет - пуля собственной рукой в висок как русскому офицеру , или харакири как самураю... Дерзайте, удачи вам.... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2003, 12:17 |
|
Вопрос аутентификации
|
|||
---|---|---|---|
#18+
> 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 А какие преимущества в создании процедуры ? (я не говорю что это плохо, но и преимуществ особых не вижу). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2003, 15:23 |
|
Вопрос аутентификации
|
|||
---|---|---|---|
#18+
ну начнём с того, что хранимые процедуры побыстрее будут (всё-таки компиленые уже), но в данном случае роли это большой не играет...:) Дело в том что закрывая прямой доступ к таблицам мы избавляемся от проблем при следующей ситуации скрипт модифицирован....тогда select *from Mytab_with_posswords выложит нам всё на блюдечке.... а вот закроем доступ напрямую, тогда модифицируй, не модифицируй скрипт а хоть чего-то добиться от хотимой таблицы без выполнения процедуры мы не сможем (а в процедуре только проверка на присутствие в таблице, т.е. ответ Y/N), и тогда хацкеру остаётся только перебор... я не беру случай когда злоумішленик получил доступ и к скрипту и к базе - это без вариантов... 1) Защита скриптов средствами веб сервера (и операционки) 2) Защита средствами операционки сессионных файлов 3) Защита скуль сервером базы и наконец SSL от прослушки....AFAIK вполне достаточно для безопасности.... Если где-то просчитался прошу ткнуть пальцем (если без матов то я не против) P.S. Я не помешан на безопасности - просто написать процедуру из семи строчек несложно, да и в скрипте вызвать её тоже...а эфект по-моему от этого есть... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2003, 16:49 |
|
Вопрос аутентификации
|
|||
---|---|---|---|
#18+
насколько я понимаю ты про 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 чтобы он не так был заметен. Через пару часов смотрит лог и вытаскивает из него данные по успешным авторизациям. Это я к тому что если хакер получил доступ к редактированию скриптов - уже ничего не спасет. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2003, 20:07 |
|
Вопрос аутентификации
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Так нельзя. Так определенно нельзя... Первое правило безопасного секс^H^H^H^Hпрограммирования - никогда не доверяйте пользовательскому вводу.. А если пользователь введет, скажем, в поле login ivanov' or '1'='1 то в результате получите выражение Код: plaintext 1.
И хоть тыщщу раз захешируйте пароль - все равно хакер пролезет.. Пожалуйста не забывайте 1) применять регулярные выражения (ereg() например), чтобы извлечь данные из пользовательского ввода 2) когда делаете запрос - используйте mysql_escape_string тобы заэкранировать все символы типа ' ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2003, 23:31 |
|
Вопрос аутентификации
|
|||
---|---|---|---|
#18+
Тут очень много подводных камней и за просто так нормальную систему безопасности новичку не создать. Всё равно где-то да будет дыра. Кто-бы что бы не говорил. Что до дешифровки хэша, то на эту тему можно много спорить. Тут если хакер получил рутовские права по доступу к БД, то ему эти хэши как-то до лампочки становяться. Стоит только поменять значение с 81dc9bdb52d04dc20036dbd8313ed055 на 202cb962ac59075b964b07152d234b70 (это, если мне память не изменяет 1234) то всё. Он тут главный. Соответственно ежели пароли к БД храняться в файлике в обычном виде, то их можно умудриться и спереть. 2Хрен: > Пожалуйста не забывайте > 1) применять регулярные выражения (ereg() например), чтобы > извлечь данные из пользовательского ввода > 2) когда делаете запрос - используйте mysql_escape_string тобы > заэкранировать все символы типа ' Это вообще нафига? А во 2-м пункте я вообще не вижу смысла. Зачем разрешать пользователю делать пароли с применением системных или иных специальных символов? То есть, если он всунет там вообще знак переноса то ты его конвертанешь в <br>? И будет пароль roma<br>lox, причем опять таки тэги! И опять конвертить из < в &.l.t(точки, чтобы форум не конвертанул)? Это перебор. Просто надо запрешать полльзователю ввод иных символов кроме цифр и латиницы. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2003, 06:39 |
|
Вопрос аутентификации
|
|||
---|---|---|---|
#18+
Хрен 1. я показал лишь алгоритм авторизации на сессиях, а не готовый скрипт 2. что делает addslashes() рассказать или сам в мануале прочитаешь ? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2003, 12:33 |
|
Вопрос аутентификации
|
|||
---|---|---|---|
#18+
кстати запрос типа SELECT * FROM my_users WHERE login = 'ivanov' or '1'='1' AND password = 'тут все равно что' ничего не дал бы из-за строки if (mysql_num_rows($res) == 1) { ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2003, 13:17 |
|
Вопрос аутентификации
|
|||
---|---|---|---|
#18+
[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() я просто не увидел, когда смотрел на код. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2003, 19:44 |
|
Вопрос аутентификации
|
|||
---|---|---|---|
#18+
С мнением, что нет абсолютной защиты я согласен полностью - всегда надо создавать резерв для быстрого восстановления...и не потому что кто не хацкер, тот плохой программер - просто, по определению, "ломать - не строить" 2Mакс Ответить на вопрос насчёт скорости не могу, т.к. разницу всё равно не ощутил бы (писал для внутренних нужд, и записей там с паролями чуть более сотни, да и сетка 100мб)...а так "на лету" могу только порассуждать...но тут ещё не понятна технология совместной работы скуля с пхп (вот тут и может скорость упасть, и запрос будет быстрее)... А насчёт select *from ... если говорить за мсскуль, то там такой запрос при отсутствии прав просто не прокатит, получим Access denided да и все... Я почему и говорю что закрываем доступ к таблице (прямой), но у скрипта есть права на запуск хранимой процедуры, а уже она (процедура) имеет права овнера (владельца) на работу с таблицей. >если хакер получил доступ к редактированию скриптов - уже ничего не спасет. Вариант с логом - ну тут отследить никак, это так скажем фактор внутренней безопасности, но на это ведь нужно время... 2ScableR Тут понятно (насчёт модификации записей в таблице на хеш 1234)...но если такое произошло - админа стрелять надо, т.к. модифицировать может только он и в монопольном режиме (т.е. удалённо не получится никак)...а вот просмотреть может каждый (почти) скрипт и процедура ( давать права то на чтение им всё равно надо)....вот от такого хеш и помогает (толку хацкеру от спёртого списка хешей) P.S. Если угонщик имеет ключи, то вся безопасность до одного места... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2003, 10:45 |
|
Вопрос аутентификации
|
|||
---|---|---|---|
#18+
2Хрен: [quote] А во 2-м пункте я вообще не вижу смысла. Зачем разрешать пользователю делать пароли с применением системных или иных специальных символов? То есть, если он всунет там вообще знак переноса то ты его конвертанешь в <br>? И будет пароль roma<br>lox, причем опять таки тэги! И опять конвертить из < в &.l.t(точки, чтобы форум не конвертанул)? [/quote] mysql_escape_strin() делает совсем не то.. RTFM Ещё раз перечитай то, что я там написал. Может до тебя что-то да и дойдет.... Хотя.... Хрен до хрена что дойдет. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2003, 16:06 |
|
Вопрос аутентификации
|
|||
---|---|---|---|
#18+
2 ScableR: >>mysql_escape_strin() делает совсем не то.. RTFM >Ещё раз перечитай то, что я там написал. Может до тебя что-то да и >дойдет.... Хотя.... Хрен до хрена что дойдет. Тормозишь опять? Какие <br>, какие &.l.t.; ? Прочитай что делает mysql_escape_string(), не поленись.. Не дойдет - поробуй руками запусти, посмотри результат.. отностиельно того, что на личности переходишь - ну чтож, значит такой твой уровень.. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2003, 21:50 |
|
Вопрос аутентификации
|
|||
---|---|---|---|
#18+
народ я понимаю, что лезу не в своё дело и в этом не фига не понимаю. но вот скриптец тот что Код: plaintext 1. 2. 3.
Я видел в книге. и точно так же получилось типа если это равно 1, то это если нет, то вот другое. И я не понял почему нельзя сделать другим методом. ну что-то вроде Код: plaintext 1. 2. 3. 4. 5. 6.
ну то есть чел после ввода нажимает на кнопку в форме, там через post идёт переменная $login ну и тд. почему так нельзя и чем это плохо? ps. если уж вопрос совсем глупый, можете не отвечать. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2003, 02:53 |
|
Вопрос аутентификации
|
|||
---|---|---|---|
#18+
вот это $row = mysql_fetch_row($result); считывает в массив строку с результатами и передвигает её дальше... следовательно если результат запроса будет нулевым то ф-ция выдаст ошибку а вот этим if (mysql_num_rows($result) == 1) мы проверяем существует ли результат и (что самое главное) один ли он (если их два или более - опасность) а дальше пожалуйста делай $row = mysql_fetch_row($result); if ($row[0] != $passw): print "Пароль не верный"; else: ботва всякая. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2003, 10:17 |
|
Вопрос аутентификации
|
|||
---|---|---|---|
#18+
1. Я полностью согласен с тем , что без сесий не обойтись -) 2. Если количество паролей не большое, то можно прям в сессию загнать пароль, предварительно его схешировав. типа не такая строчка if $vUserPassword = 'MayPassword' а типа if $vUserPassword = crypt('dfjklhgkjghdjkdgjkh') или мд5 не важно Почему такое не устраивает. А насчет хранимый процедур, то если разговор идет за MYSQL, то если мне не изменяет память их там нет =))))))) Если мы говорим про MYSQL, то конечно мы делаем табличку, которую могут все читать, а пароли хешируем и мд5типуем =))))) И главное это мне кажеться сделать классы, положить их в папку, куды никто попасть не может и делать что-то типа такого if cSecurityClass -> TestPass($vLogin,vPassword) {} Если я ошибся в коде (в синтаксисе), то не обесутте, я на пхп уже давно не программил =( все больше на PowerBuildere, но я исправлюсь честно ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2003, 09:40 |
|
|
start [/forum/topic.php?fid=23&msg=32268476&tid=1480401]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
172ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 235ms |
total: | 517ms |
0 / 0 |