Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 570

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты. Снова обращаюсь к вам за помощью!

Хочу создать клиентское приложение на Delphi7 под БД MySQL. В программе будет регистрация и авторизация.

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

2-й вопрос авторизация. Каким способом более безопасно и эффективно запрашивать у пользователя логин и пароль, перед показом ему основной формы(которая будет доступна после авторизации)? onShow - Form2.ShowModal - не предлагать нужен более продвинутый способ.

Возможно ли сделать проверку логина и пароля в главном файле проекта еще до создания основной формы, и как вы думаете, практичен ли этот способ? Если можно, пример реализации, буду очень признателен...

mr_switch Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: mr_switch (статус: Посетитель)
Вопрос отправлен: 8 сентября 2010, 22:23
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, mr_switch!
Не нужно пускать пользователей в базу! потому что так любой человек уведет всю базу. Правильно делать некого посредника. То есть специальное приложение, которое и работает с одной стороны с базой, а с другой с приложением - классическая трехзвенка.

Сами пароли конечно в базе хранить не стоит, а например md5 хеши.

Проверить пароль до создания главной формы конечно можно. и это не сложно. Открываем файл Project1.dpr (project-> View Source) и там видим код создания главной формы. Никто не мешает перед ней создать свою и к примеру, если все плохо, то даже не создавать главную форму. Поищите в разделе статей мою статью о формах, там есть предостаточно информации.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 9 сентября 2010, 00:50
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 11; последнее сообщение — 13 сентября 2010, 05:21; участников в обсуждении: 3.
bugmenot

bugmenot (статус: 3-ий класс), 9 сентября 2010, 00:24 [#1]:

1. почему бы не выдавать юзерам непривилегированные аккаунты?
2. отпадает в этом случае. и вообще маловразумительно про "продвинутый способ"
виконання програми розпочинається з того самого мiсця, де призупинилося.

mr_switch

mr_switch (статус: Посетитель), 9 сентября 2010, 02:02 [#2]:

Вадим К: Можно подробнее о трехзвенке, искал в сети но нечего конкретного не нашел, хоть ссылку на статью. Я так понимаю это приложение посредник и оно должно находиться на сервере?
К примеру, у меня БД находится на хостинге, мне нужно сознать приложение которое будет работать с этой БД, от определенных пользователей, которые зарегистрировались с помощью данного приложения.

Нашел вашу стать "О формах" сейчас читаю. Спасибо.
Вадим К

Вадим К (статус: Академик), 9 сентября 2010, 12:30 [#3]:

Если база находиться на хостинге, то скорее всего только трехзвенка, так как обычно хостинги не дают доступ к базе извне.
В данном случае промежуточным звеном может выступить скрипт на php/perl/другой любимый язык. А Ваше приложение будет обращаться по http к этому скрипту. Вы ему имя-пароль, а он Вам "да/нет". хотя лучше не просто да, а ещё и какой то сессионный уникальный ключ.
Галочка "подтверждения прочтения" - вселенское зло.
mr_switch

mr_switch (статус: Посетитель), 9 сентября 2010, 16:51 [#4]:

Вадим К: На хостинге который я буду использовать возможно неограниченное подключение к БД из вне. Насчет PHP между клиентом и сервером, были мысли, но это усложнит работу. Если использовать PHP то клиентскую часть тогда уже лучше сделать в виде мини браузера, чтоб не заворачиваться с получением ответа по Http так как ответы могут быть очень большими. Но в этом случае может получиться нагрузка на сервер если одновременно будет 1000-2500 клиентов.

"Не нужно пускать пользователей в базу! потому что так любой человек уведет всю базу." - каким образом это возможно сделать. Есть ли какие то способы безопасности (может шифрование) помимо трехзвенки.
Вадим К

Вадим К (статус: Академик), 9 сентября 2010, 17:28 [#5]:

если делать в виде браузера - нагрузка будет выше, чем если сделать наоборот. Скрипт ведь только передает данные, при чем он может их передавать в очень сжатом виде.

Также нет смысла передавать все миллионы записей. Все равно на экране не будет видно. Можно передать небольшой пачкой. если клиенту нужно - он ещё запросит.

Под фразой "уведет базу" -я понимаю две вещи
- скопирует все данные (либо интересные).
- удалит все данные.

Достаточно подсмотреть пароль, а его вы обязаны передать, иначе не подключитесь. То есть - шифруй не шифруй, а пароль передать придется. Вот тут его и возьмут.

2000-3000 клиентов при правильном подходе - это мелочи.
Галочка "подтверждения прочтения" - вселенское зло.
mr_switch

mr_switch (статус: Посетитель), 9 сентября 2010, 18:00 [#6]:

Вадим К: Я так понимаю, преимущество использования трехзвенки с PHP по безопасности в том что мы не передаем клиенту пароли от подключения к БД. По сравнению с вариантов сделать браузер - минимальная нагрузка.
Но опять же, к PHP скрипту может подключиться любой желающий который поймет как работает клиент, и может увести базу, хитрыми запросами к PHP скрипту. Тут же появляется идея шифровать ответы скрипта, которые расшифровать может клиент с помощью определенного ключа, но и этот ключ можно получить если взломать клиента..?
Вадим К

Вадим К (статус: Академик), 9 сентября 2010, 18:57 [#7]:

Взломать можно абсолютно все. абсолютно. вопрос только времени и денег.
Но если работаем через промежуточный скрипт и хорошо фильтруем данные, то можно контролировать что уходит и что приходит.
Во вторых, появляется гибкость - в один прекрасный момент мы решили сменить структуру таблиц и добавить пару полей - нет проблем, все будет работать. А вот если напрямую генерировать запросы, то может быть что угодно.
Галочка "подтверждения прочтения" - вселенское зло.
mr_switch

mr_switch (статус: Посетитель), 9 сентября 2010, 19:11 [#8]:

Вадим К: Как по вещему, какой вариант более надежней по безопасности? Использование трехзвенки с РНР или клиент с прямым подключением к БД. Что тяжелее взломать? Пока меня интересует только безопасность.
Вадим К

Вадим К (статус: Академик), 9 сентября 2010, 20:34 [#9]:

я выше написал - при правильном подходе, трехзвенка лучше. Но только нужно помнить одно - не доверяй входным данным. То есть, если в каком то параметре должно прийти целое число, то нужно на серверной стороне это проверить. И так далее.
Галочка "подтверждения прочтения" - вселенское зло.
mr_switch

mr_switch (статус: Посетитель), 9 сентября 2010, 21:33 [#10]:

Вадим К: Спасибо за помощь и за инфу. Скорее всего остановлюсь на трехзвенке с РНР. Создал тестовый проект и РНР фаил - передал несколько пост запросов с помощью TIdHTTP и получил ответы. Пока все просто и понятно. Буду думать насчет уникального ключа или шифрования ответов...
mr_switch

mr_switch (статус: Посетитель), 13 сентября 2010, 05:21 [#11]:

Всетаки использую трехзвенку. Что можете посоветовать для передачи данных от РНР скрипта к Клиенту. Может сталкивались. Какой наиболее удобный способ передавать данные в больших объемах?

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:32
Выполнено за 0.03 сек.