Защита RESTful API - PullRequest
       11

Защита RESTful API

0 голосов
/ 20 декабря 2010

Для моего текущего побочного проекта, который представляет собой модульную систему веб-управления (которая может содержать модули для управления базами данных, cms, управления проектами, управления ресурсами, отслеживания времени и т. Д.), Я хочу представить всю систему как RESTfulAPI, как мне кажется, сделает систему более удобной в использовании.Сама система будет закодирована в ASP.MET MVC3, однако, если я сделаю все данные / действия доступными через RESTful API, это должно сделать систему очень простой в использовании с PHP, Ruby, Python и т. Д. (Они могут дажесоздайте собственный интерфейс для управления определенными данными, если они захотят).

Однако, единственное, что кажется трудным сделать легко (с точки зрения пользователя, использующего RESTful API) с RESTful API, - это безопасность с помощью ajax.функциональность.Если бы я хотел что-то сложное в настройке и использовании, я бы просто создал сервисы SOAP, но весь смысл использования RESTful API в том, что это очень просто.Наиболее распространенный способ защиты RESTful API с помощью ключа, связанного с пользователем.Это прекрасно работает, когда все вызовы выполняются на стороне сервера, однако, как только вы начинаете выполнять функции AJAX, это меняется.Я хотел бы, чтобы RESTful API мог вызываться напрямую из javascript, однако любой, кто является firebug, легко сможет получить доступ к ключу, который использует пользователь, разрешить этому человеку доступ к системе.Есть ли лучший способ защитить RESTful API, если он не заставляет пользователя RESTful API делать сложные вещи только для его настройки?

Ответы [ 2 ]

0 голосов
/ 28 декабря 2010

Можно сделать некоторую подпись в запросе от javascript. Но я уверен, что URL «RESTfull» будут с этой дополнительной информацией. И здесь у вас та же проблема: любой, кто может видеть ваш алгоритм создания подписи, может сделать свою собственную подпись, даже если ваш сервер примет это.

0 голосов
/ 20 декабря 2010

С одной стороны, вы не можете помешать пользователю вашего API не раскрывать свой ключ.

Но если вы пишете клиент для вашего API, я бы предложил использовать вашу серверную часть для выполнения любых запросов к API, в то время как ваши HTML-страницы предоставляют данные от пользователя. Если вам абсолютно необходимо использовать Javascript для вызова API, и у вас все еще есть серверная сторона, которая заполняет страницу, о которой идет речь, то вы можете скрыть фактический ключ с помощью одностороннего алгоритма дайджеста в зависимости от метки времени, одновременно генерируя и сделайте так, чтобы ваш API проверял этот дайджест также в зависимости от времени.

Кроме того, я бы посоветовал вам взглянуть на OAuth Nonces и временные метки немного глубже. Twitter и другие провайдеры API, очевидно, тоже сталкиваются с этой проблемой, поэтому они должны что-то делать со значениями Nonce.

...