|
Вопрос # 4 570/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты. Снова обращаюсь к вам за помощью!
Хочу создать клиентское приложение на Delphi7 под БД MySQL. В программе будет регистрация и авторизация.
1-й вопрос по безопасности. Не безопасно ли в клиентской части хранить данные о подключении к серверу (сервер, логин, пароль). Возможно реализовать безопасное хранение этих данных в клиентской программе?
2-й вопрос авторизация. Каким способом более безопасно и эффективно запрашивать у пользователя логин и пароль, перед показом ему основной формы(которая будет доступна после авторизации)? onShow - Form2.ShowModal - не предлагать нужен более продвинутый способ.
Возможно ли сделать проверку логина и пароля в главном файле проекта еще до создания основной формы, и как вы думаете, практичен ли этот способ? Если можно, пример реализации, буду очень признателен...
 |
Вопрос задал: 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 (статус: 3-ий класс), 9 сентября 2010, 00:24 [#1]:
1. почему бы не выдавать юзерам непривилегированные аккаунты?
2. отпадает в этом случае. и вообще маловразумительно про "продвинутый способ"
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
mr_switch (статус: Посетитель), 9 сентября 2010, 02:02 [#2]:
Вадим К: Можно подробнее о трехзвенке, искал в сети но нечего конкретного не нашел, хоть ссылку на статью. Я так понимаю это приложение посредник и оно должно находиться на сервере?
К примеру, у меня БД находится на хостинге, мне нужно сознать приложение которое будет работать с этой БД, от определенных пользователей, которые зарегистрировались с помощью данного приложения.
Нашел вашу стать "О формах" сейчас читаю. Спасибо.
|
|
Вадим К (статус: Академик), 9 сентября 2010, 12:30 [#3]:
Если база находиться на хостинге, то скорее всего только трехзвенка, так как обычно хостинги не дают доступ к базе извне.
В данном случае промежуточным звеном может выступить скрипт на php/perl/другой любимый язык. А Ваше приложение будет обращаться по http к этому скрипту. Вы ему имя-пароль, а он Вам "да/нет". хотя лучше не просто да, а ещё и какой то сессионный уникальный ключ.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
mr_switch (статус: Посетитель), 9 сентября 2010, 16:51 [#4]:
Вадим К: На хостинге который я буду использовать возможно неограниченное подключение к БД из вне. Насчет PHP между клиентом и сервером, были мысли, но это усложнит работу. Если использовать PHP то клиентскую часть тогда уже лучше сделать в виде мини браузера, чтоб не заворачиваться с получением ответа по Http так как ответы могут быть очень большими. Но в этом случае может получиться нагрузка на сервер если одновременно будет 1000-2500 клиентов.
"Не нужно пускать пользователей в базу! потому что так любой человек уведет всю базу." - каким образом это возможно сделать. Есть ли какие то способы безопасности (может шифрование) помимо трехзвенки.
|
|
Вадим К (статус: Академик), 9 сентября 2010, 17:28 [#5]:
если делать в виде браузера - нагрузка будет выше, чем если сделать наоборот. Скрипт ведь только передает данные, при чем он может их передавать в очень сжатом виде.
Также нет смысла передавать все миллионы записей. Все равно на экране не будет видно. Можно передать небольшой пачкой. если клиенту нужно - он ещё запросит.
Под фразой "уведет базу" -я понимаю две вещи
- скопирует все данные (либо интересные).
- удалит все данные.
Достаточно подсмотреть пароль, а его вы обязаны передать, иначе не подключитесь. То есть - шифруй не шифруй, а пароль передать придется. Вот тут его и возьмут.
2000-3000 клиентов при правильном подходе - это мелочи.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
mr_switch (статус: Посетитель), 9 сентября 2010, 18:00 [#6]:
Вадим К: Я так понимаю, преимущество использования трехзвенки с PHP по безопасности в том что мы не передаем клиенту пароли от подключения к БД. По сравнению с вариантов сделать браузер - минимальная нагрузка.
Но опять же, к PHP скрипту может подключиться любой желающий который поймет как работает клиент, и может увести базу, хитрыми запросами к PHP скрипту. Тут же появляется идея шифровать ответы скрипта, которые расшифровать может клиент с помощью определенного ключа, но и этот ключ можно получить если взломать клиента..?
|
|
Вадим К (статус: Академик), 9 сентября 2010, 18:57 [#7]:
Взломать можно абсолютно все. абсолютно. вопрос только времени и денег.
Но если работаем через промежуточный скрипт и хорошо фильтруем данные, то можно контролировать что уходит и что приходит.
Во вторых, появляется гибкость - в один прекрасный момент мы решили сменить структуру таблиц и добавить пару полей - нет проблем, все будет работать. А вот если напрямую генерировать запросы, то может быть что угодно.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
mr_switch (статус: Посетитель), 9 сентября 2010, 19:11 [#8]:
Вадим К: Как по вещему, какой вариант более надежней по безопасности? Использование трехзвенки с РНР или клиент с прямым подключением к БД. Что тяжелее взломать? Пока меня интересует только безопасность.
|
|
Вадим К (статус: Академик), 9 сентября 2010, 20:34 [#9]:
я выше написал - при правильном подходе, трехзвенка лучше. Но только нужно помнить одно - не доверяй входным данным. То есть, если в каком то параметре должно прийти целое число, то нужно на серверной стороне это проверить. И так далее.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
mr_switch (статус: Посетитель), 9 сентября 2010, 21:33 [#10]:
Вадим К: Спасибо за помощь и за инфу. Скорее всего остановлюсь на трехзвенке с РНР. Создал тестовый проект и РНР фаил - передал несколько пост запросов с помощью TIdHTTP и получил ответы. Пока все просто и понятно. Буду думать насчет уникального ключа или шифрования ответов...
|
|
mr_switch (статус: Посетитель), 13 сентября 2010, 05:21 [#11]:
Всетаки использую трехзвенку. Что можете посоветовать для передачи данных от РНР скрипта к Клиенту. Может сталкивались. Какой наиболее удобный способ передавать данные в больших объемах?
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|