Форум: "Начинающим";
Текущий архив: 2009.01.04;
Скачать: [xml.tar.bz2];
ВнизКак хранить пароли? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.005 c