Как сделать вызов API на моем сервере доступным только с одного URL - PullRequest
1 голос
/ 05 января 2011

Я не знаю, достаточно ли ясен заголовок, в любом случае, что мне нужно сделать, это довольно просто: у меня есть контент, доступ к которому можно получить с помощью вызова API на моем сервере;Этот контент связан с пользователем, поэтому, когда вы запрашиваете доступ к нему, вы должны сначала подождать, пока владелец не авторизует вас.Поскольку этот контент, вероятно, будет встроен в статьи блога или сообщения бланков, я хочу, чтобы он был доступен только с URL-адреса, на который у пользователя есть права.

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

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

1 Ответ

0 голосов
/ 05 января 2011

С сеансами:

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

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

Без сеансов:

Если у вас нет сеансов, чтобы обойти стойкость сервера, вы можете воспользоваться трюком, которыйAmazon S3 использует для безопасности.Вы должны создать что-то вроде строки json, которая дает авторизацию на следующие 30 секунд, 5 минут, что угодно.Для изменения значения потребуется указать временную метку.Вы должны использовать секретный ключ на своем сервере, который вы комбинируете со строкой JSON для создания значения хеш-функции.

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

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

Предупреждения:

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

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