CouchDB и Cloudant Security

Мы использовали CouchDB в производстве, в основном создавая приложения в контролируемых средах. В большинстве случаев мы используем библиотеку промежуточного программного обеспечения для прямых вызовов couchdb/cloudant, поэтому избегаем прямых вызовов (Front-End JavaScript вызывает прямые вызовы CouchDB/Cloudant).

Из соображений безопасности очевидно, что для аутентифицированной базы данных CouchDB:
http://{username}:{password}@IPAddress:Port/DB
ИЛИ для cloudant:
https://{username}:{password}@username.cloudant.com/DB , Если вызов выполняется непосредственно из JavaScript, инструменты разработчика в браузерах сегодня позволяют человеку реализовать этот вызов и, следовательно, имеет доступ к вашей базе данных полностью.

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

Мы начали с того, что создали отдельную облачную учетную запись для всех вложений, чтобы inquisitive boy не вмешивался в фактические метаданные или информацию наших пользователей. Таким образом, единственная облачная учетная запись, к которой они могут иметь доступ, — это учетная запись вложений, поскольку мы делаем прямые вызовы JavaScript к нашей базе данных.

Вопрос. Как нам найти способ скрыть имя пользователя и пароль нашей облачной среды, что позволит нам безопасно выполнять прямые вызовы JavaScript в облачной среде? Наша инфраструктура полностью находится в облаке, поэтому у нас нет прокси и прочего для работы. Мы слышали о сервисах сокращения URL-адресов, CDN и т. д. но мы не придумали действительно убедительного решения.


person Muzaaya Joshua    schedule 03.09.2014    source источник


Ответы (2)


Попробуйте использовать конечную точку _session. Это настроит аутентификацию файлов cookie.

person DaveEdelstein    schedule 03.09.2014

Как нам найти способ скрыть имя пользователя и пароль нашей облачной среды, что позволит нам безопасно выполнять прямые вызовы JavaScript в облачной среде?

Насколько я знаю, вы не можете сделать это без использования промежуточного программного обеспечения или какого-либо прокси. Но это не значит, что мы совершенно беззащитны. Couchdb дает нам несколько копий, чтобы ткнуть inquisitive boy :)

Хорошо, что вы сделали отдельную базу данных вложений. Вы не упоминаете в своем вопросе, используете ли вы схему авторизации CouchDB, поэтому я предполагаю, что это не так. Итак, первый шаг — создать пользователя в базе данных Couchdb _users, а затем назначить его членом в базе данных вложений. Подробнее здесь и здесь.

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

Это только начало, но этого недостаточно, так как участник все еще может читать через _all_docs, а это уже DOS-атака. Итак, проблема, с которой мы сталкиваемся сейчас, заключается в том, что мы делаем это в данный момент.

https://{имя пользователя}:{пароль}@username.cloudant.com/DB

Очень хорошим ходом было бы изменить его на

https://{имя пользователя}:{пароль}@someurl.com/

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

С этим у вас есть две вещи для вас.

  1. сталкер inquisitive boy не будет знать, куда идут звонки.

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

Все еще не на 100% безопасно, но все в порядке с точки зрения безопасности на уровне чтения. Надеюсь это поможет.

person Akshat Jiwan Sharma    schedule 03.09.2014