2014-02-14 2 views
1

Я разрабатываю веб-приложение с использованием Java EE и некоторых компонентов с открытым исходным кодом (Spring, Struts 2, jQuery и т. Д.). Некоторые из моих веб-страниц требуют аутентификации (Spring Security), а другие нет. Я пишу некоторые REST API (Restlet), и я использую их с моих страниц с помощью вызовов AJAX (jQuery). Я знаю, что другие веб-сайты не могут использовать мои API REST, если я не разрешаю CORS, и это то, что я хочу.Защищенные API REST от не-браузерного клиента

Однако любой клиент без браузера (завиток, приложения Java и т. Д.) Может вызывать мои API-интерфейсы REST: как я могу это запретить? Я не могу использовать аутентификацию для всех API REST, потому что я использую некоторые из них на веб-страницах, которые не требуют проверки подлинности. Я знаю, что некоторым API (например, Facebook SDK) требуется идентификатор приложения для включения вызовов, но каждый может украсть ключ из кода Javascript, включенного в мои веб-страницы.

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

ответ

2

Вы ничего не можете поделать.

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

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

Почему вы боитесь «нерабочих» клиентов? Почему вас интересует, какой клиент они используют? Как не-браузерный клиент отличается от обычного браузера для ваших случаев использования?

Ответьте на этот вопрос, и вы найдете ответы лучше.

Вы боитесь, что они «экранируют» ваш сайт, быстро загрузите его с помощью чего-нибудь вроде wget? Затем вы можете добавить какое-то правило на стороне сервера, запирающее их доступ (если IP x.y.z.w делает больше, чем Q-запросов в течение одного дня, а затем медленно отбрасывать запрос/сон 10s/отправлять контент ДЕЙСТВИТЕЛЬНО).

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

Помните правило № 1 дизайна клиент/сервер: «Никогда не доверяйте клиенту». В Интернете никто не знает, что вы бот.

+0

Да, я беспокоюсь о DoS-атаках и других вредоносных программах. Я ищу простое решение, которое я могу применить ко всем моим API без головной боли. –

Смежные вопросы