Как безопасно общаться с базой данных с помощью Java-апплета - PullRequest
3 голосов
/ 26 марта 2010

Я довольно давно писал веб-приложения на PHP с MySQL. Я всегда сохранял информацию о подключении к базе данных в переменной конфигурации и таким образом подключался к базе данных.

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

Я параноик, что кто-то декомпилирует мое приложение или найдет способ извлечь информацию о подключении к моей базе данных и использовать ее злонамеренно.

Любые предложения о том, как сделать это безопасно?

Ответы [ 3 ]

5 голосов
/ 26 марта 2010

Просто чтобы уточнить, вы не слишком беспокоитесь о том, что соединение может быть "подслушано", вы беспокоитесь о том, что кто-то может взломать ваш апплет и вытащить детали подключения к базе данных, верно?

Ну, я бы, вероятно, не позволил бы ему подключиться напрямую, а вместо этого поговорил бы с веб-приложением, которое возвращало данные в формате JSON / XML. Люди все еще могут получить это из вашего апплета, если они действительно этого хотят, но они ограничены возможностями веб-приложения.

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

Если вы только делаете записи, другой вариант - иметь публичную базу данных и личную базу данных. Записи из вашего апплета отправляются в общедоступную базу данных и синхронизируются после проверки. Проблема в том, что вы можете потерять некоторые встроенные проверки и связи, если не сохраните копию всех данных в общедоступной БД, что может быть небезопасно.

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

Я думаю, что создание промежуточного веб-приложения, вероятно, является лучшим выбором, но я не знаю полного сценария, поэтому я не в лучшем положении, чтобы судить.

1 голос
/ 26 марта 2010

Это проблема доверенного клиента , не обращая внимания на JDBC в отношении расширений аутентификации поверх стандартных учетных данных соединений JDBC, я предлагаю вам обернуть все запросы через собственный уровень БД.

Я фактически реализовал оболочку JDBC, используя Ajax, где клиент выдает прямые операторы SQL из JS в сервлет, который преобразует их в запросы к БД, я реализовал обновление и запрос, и вся реализация занимает менее 300 строк кода сервлета Java 60 строк кода JS.

Решение не включает аутентификацию, но ее легко добавить поверх слоя HTTP. В любом случае, у вас есть проблема с доверенным клиентом, это не решает проблему, когда взломанный клиент может получить доступ ко всей схеме базы данных вне предопределенных или указанных случаев использования, например:

select * FROM records

Вместо внутреннего запроса:

SELECT id, data, val, ... FROM records WHERE userid = ...

Выбирает только те записи, которые были созданы аутентифицированным пользователем. Единственный способ обеспечить безопасность - доступ к БД только через предопределенные методы поиска / изменения данных. В противном случае безопасность и изоляция данных должны обеспечиваться самой базой данных. Прочитайте «дорогая большая база данных O»:)

Мой пример JS / Java на 400 строк используется в тестовой системе только для внутреннего использования.

1 голос
/ 26 марта 2010

Я бы предложил иметь апплет, который общается с сайтом. Который сам связывается с базой данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...