Как защитить источник данных на основе XML? - PullRequest
0 голосов
/ 02 мая 2011

У меня есть приложение на основе GWT / SmartGWT, которое развернуто в Google App Engine. Я использую источник данных на основе XML. Этот файл необходим для нормальной работы приложения для всех пользователей. Однако я не хочу, чтобы пользователи без прав администратора могли просматривать или загружать этот файл напрямую, указав его полный путь в адресной строке. Я не могу использовать ограничение безопасности GAE (разрешить доступ только администраторам), как упомянуто ниже, потому что это сделает приложение бесполезным для обычных пользователей.

<security-constraint>
    <web-resource-collection>
        <url-pattern>ds/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>admin</role-name>
    </auth-constraint>
</security-constraint>

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

Спасибо заранее.

ОБНОВЛЕНИЕ (3 мая 2011 г.):

У меня есть данные в нескольких файлах XML, и все данные доступны только для чтения (только получить, не добавлять / обновлять / удалять в этих файлах). У меня есть несколько различных функций на клиенте, которые используют эти данные. В большинстве случаев каждая функциональность имеет отдельный источник данных. В некоторых случаях у меня есть привязка данных с виджетами SmartGWT (например, ListGrid), а в других я просто конвертирую данные в объекты и использую объекты на клиенте.

1 Ответ

2 голосов
/ 02 мая 2011

То есть файл должен быть загружен клиентским кодом (javascript), но вы не хотите, чтобы пользователи его видели?

Это невозможно сделать - если данные доступны на клиенте, то к ним можно получить доступ.

Решения:

  1. Неправильное решение:выставить эти данные через GWT-RPC вместо загрузки файла.GWT-RPC трудно реверсировать, поэтому «обычные» конечные пользователи не смогут просто загрузить данные.Тем не менее, пользователи, обладающие определенными знаниями, смогут это сделать, так что это не решение для защиты конфиденциальных данных.

  2. Правильное решение: предоставлять клиенту только те данные, которые необходимы и актуальны дляданный пользователь.Используйте GWT-RPC для доступа к этим данным или используйте REST, если у вас есть и другие клиенты, не являющиеся GWT.Не подвергайте никакие конфиденциальные данные.Это в основном заставляет вас реализовывать бизнес-логику на сервере, а не на клиенте.Что нужно сделать.

Обновление:

вы все равно должны защитить сервлет :

<security-constraint>
    <web-resource-collection>
        <url-pattern>/profile/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>
</security-constraint>
...