Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.01.04;
Скачать: CL | DM;

Вниз

Как хранить пароли?   Найти похожие ветки 

 
Alex_Ford   (2008-11-19 22:41) [0]

Добрый вечер!

Уважаемые мастера, подскажите пожалуйста, как в таблице хранить пароли, и осуществлять проверку

Я попытался так, но проверка осуществляется как бы по принципу "либо-либо"...... даже не знаю как правильно поставить вопрос.

Код:


procedure TForm5.SpeedButton1Click(Sender: TObject);
var i,j: integer;
begin
 if not (table1.Locate("user",edit1.Text,[loCaseInsensitive]))xor
        (table1.Locate("password",edit2.Text,[loCaseInsensitive]))then
    begin
    form2.showmodal;
    form1.close;


 
Eraser ©   (2008-11-19 22:45) [1]

в таблице не надо хранить пароли. лучше хранить хэши паролей.


 
Alex_Ford   (2008-11-19 22:47) [2]

А как это сделать? Я впервые с этим сталкиваюсь.


 
Sergey13 ©   (2008-11-19 23:08) [3]

> [0] Alex_Ford   (19.11.08 22:41)

Надо выбирать СУБД которая это умеет делать без участия программиста.


 
Юрий Зотов ©   (2008-11-19 23:22) [4]

> Alex_Ford   (19.11.08 22:47) [2]

В Сети легко найти и справку по слову "хэш", и готовые хэш-функции.

Либо [3].


 
KilkennyCat ©   (2008-11-20 00:41) [5]

Прежде чем выбирать метод защиты, сначала нужно оценить степень защиты.
Далеко не всегда так уж прям нужно хэширование.
В моей, например, текущей программке пароли примитивно хранятся в файле настроек, представляющий собой просто текстовый файл.
Ибо задача примитивна - разграничить доступ администратора и оператора, дабы оператор не сбил настройки. Операторами данной программы предполагаются быть люди с уровнем компьютерной грамотности на уровне данной программы.  Да и в случае неправомочного изменения настроек ничего серъезного не произойдет.
Городить хэширование сюда... упаси кто-там-на-небеси.


 
Германн ©   (2008-11-20 01:12) [6]


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

+1


 
Anatoly Podgoretsky ©   (2008-11-20 09:16) [7]

> KilkennyCat  (20.11.2008 0:41:05)  [5]

В качестве хеша может выступать CRCx


 
Slym ©   (2008-11-20 09:36) [8]

Alex_Ford   (19.11.08 22:41)
"password",edit2.Text,[loCaseInsensitive]))

CaseInsensitive - непорядок!
лучше

Query.SQL.Text:="SELECT (Count(Name)>0) AS Login
FROM Users
WHERE ((Name= :User) and (Password= :Password));";
Query.Papams[0].Value:="Admin";
Query.Papams[1].Value:="qWeRtY";
Query.Open;
if not Query.Fields[0].asBoolean then raise Exception.Create("Fuck off!");



 
Ega23 ©   (2008-11-20 10:06) [9]


> Далеко не всегда так уж прям нужно хэширование.


Построение md5 или crc от строки в (ну не знаю, в 20 символов) - это фигня. Миллисекунда. Дольше сравнение со значением в базе будет идти.

2 Автор.
Принцип такой: берёшь алгоритм хэширования (какой - дело твоё, их полно). При  заведении пользователя прогоняешь его пароль через данный алгоритм, получаешь хэш пароля. Его записываешь в базу.
При попытке соединения берёшь введённый логин пользователя, находишь по нему нужную запись в БД, берёшь введённый пароль пользователя, прогоняешь его через хэш-алгоритм и сравниваешь полученный хэш с тем, который лежит в БД.


 
KilkennyCat ©   (2008-11-20 11:17) [10]


> Ega23 ©   (20.11.08 10:06) [9]

А причем здесь время работы?
Да пусть оно хоть реактивно.
А время разработки, оно что, даром?


 
Ega23 ©   (2008-11-20 11:29) [11]


> А время разработки, оно что, даром?


function CheckLogin(const Login, Pwd : string; Conn : TADOConnection) : Boolean;
var
 param : TParameter;
begin
 Result := False;
 with TADODataSet.Create(nil) do
 begin
   try
     Connection := Conn;
     CommandText := "select pwd from logins where upper(login)=?";
     param := Parameters.AddParameter;
     param.DataType = ftString;
     param.Direction := pdInput;
     param.Value := ANSIUpperCase(Login);

     try
       Open;
       Result := (Fields[0].AsString = MD5(Pwd));
     except

     end;
     
   finally
     Free;
   end;
 end;
end;


Реализаций md5 в тырнете - тьма.


 
KilkennyCat ©   (2008-11-20 13:31) [12]

В тырнете тьма реализаций чего угодно.

теперь сравни с моим вариантом:

function CheckLogin(const Pwd : string) : Boolean;
begin
Result := Pwd = "hjgbjvfytey";
end;


и вот докажи мне, что мне необходимо что-то круче этого, если что-то круче этого просто НЕНУЖНО.


 
Ega23 ©   (2008-11-20 13:35) [13]


> и вот докажи мне, что мне необходимо что-то круче этого,
>  если что-то круче этого просто НЕНУЖНО.


5 минут, и твой "hjgbjvfytey" будет вскрыт. А хэш будет искаться брутфорсом очень долго.
А если ещё сделать логин не менее 5 символов и писать хэш не от пароля, а от логин + пароль, или даже md5(md5(pwd) + login) - задолбаешься вскрывать. Брутфорс и очень долгий.


 
KilkennyCat ©   (2008-11-20 13:48) [14]


> Ega23 ©   (20.11.08 13:35) [13]


5 минут и я просто заставлю твою функцию при любом раскладе выдавать true.

Но ты не понимаешь что ли? Уровень защиты такого рода иногда просто не нужен. Никто не будет дизассемблировать или брутфорсить, в моем конкретном случае нужна просто защита от рядового пользователя, чтоб не лез в настройки. Если он владеет асмом и знает, что такое брутфорсинг - он уже не рядовой, и пускай лезет, его мозгов хватит, чтоб не напортить, или восстановить напорченное.
Я не говорю, что хэш это плохо.
Просто разные ситуации возможны, автор же данной ветки не уточнял, что он делает, банк-клиент или просто бухгалтерию своей заначки, с защитой от жены и тещи.


 
Anatoly Podgoretsky ©   (2008-11-20 13:53) [15]

> KilkennyCat  (20.11.2008 13:48:14)  [14]

Заначку не надо хранить в базе.


 
Ega23 ©   (2008-11-20 14:01) [16]


> 5 минут и я просто заставлю твою функцию при любом раскладе
> выдавать true.


Есть гораздо более остроумные способы.
Например, некие данные (срок действия пароля, права данного пользователя и т.п.) лежат в бд в виде зашифрованной строки, ключ к которой - и есть твой пароль. Отдельно в бд лежит CRC расшифрованной строки.
Таким образом, при введении пароля расшифровывается некая строка. При совпадении CRC она сериализуется в определённые поля сущности "Пользователь".
И тут ты уже вообще хрен поможешь, даже зная асм.


 
KilkennyCat ©   (2008-11-20 14:14) [17]


> И тут ты уже вообще хрен поможешь, даже зная асм.


Угу. Ну тогда я возьму бутылку водки и пассатижи. И ты мне сам расскажешь все пароли :)

И что получается?
50% программы - заумный код. Два килограмма оборудования(сканер сетчатки глаза, отпечатков пальцев, температуры задницы). Служба безопасности. Ежеутренний инструктаж. Гипноустановка в мозгу. Ампула с цианидом в зубе.


 
Ega23 ©   (2008-11-20 14:22) [18]


> Угу. Ну тогда я возьму бутылку водки и пассатижи. И ты мне
> сам расскажешь все пароли :)


Ну против терморектального криптоанализа никуда не попроёшь...  :)


> 50% программы - заумный код. Два килограмма оборудования(сканер
> сетчатки глаза, отпечатков пальцев, температуры задницы).
>  Служба безопасности. Ежеутренний инструктаж.


Откровенно говоря я 8 лет как раз для различных СБ и писАл.


 
Anatoly Podgoretsky ©   (2008-11-20 15:28) [19]

> KilkennyCat  (20.11.2008 14:14:17)  [17]

Паяльник это сила!


 
KilkennyCat ©   (2008-11-20 16:39) [20]


> 8 лет

Тогда понятно. Это у тебя уже сила привычки.


 
Ega23 ©   (2008-11-20 17:18) [21]


> Тогда понятно. Это у тебя уже сила привычки.


Возможно..  :)



Страницы: 1 вся ветка

Текущий архив: 2009.01.04;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.012 c
15-1225863815
TUser
2008-11-05 08:43
2009.01.04
В США избран демократ Б.Обама


15-1225940622
axd
2008-11-06 06:03
2009.01.04
мячик


15-1225720717
blackman
2008-11-03 16:58
2009.01.04
Что с сайтом?


15-1225780040
palva
2008-11-04 09:27
2009.01.04
В московском метро много шпаны


2-1226488903
Vova
2008-11-12 14:21
2009.01.04
DeleteFile