2013-11-17 3 views
2

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

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

Member Name 
Member ID 
Who the Member belongs to (user ID) 

У меня есть ресурс API, называемый членами. Каждый член принадлежит пользователю моей системы.

Я создал авторизацию, как в таблице ниже. Примечание: авторизацией я имею в виду «это разрешение предоставлено для этого пользователя, чтобы выполнить это действие», и не следует путать это с аутентификации т.е. доступа к API):

============== ======= ======= ======= ======= 
Resource  Create Read  Update Delete 
============== ======= ======= ======= ======= 
Member   Public Owner Owner No 
============== ======= ======= ======= ======= 

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

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

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

бы кто-нибудь сделать это разные или я, я над этим думал?

Примечание: Тэг Python добавлен, потому что это API Python, и, возможно, это имеет значение или нет. Тег Javascript, добавленный в качестве клиентской стороны, является скриптом. Если нет или нет, я удаляю тег или вопрос.

+1

Если ваш единственный вариант - создать участников через клиентскую сторону, то я думаю, что ваш выбор в порядке. Вам просто нужно ограничить количество пользователей, которые могут быть созданы с одного и того же IP-адреса, и удалить тех, кто не заходил в течение 48-72 часов. По крайней мере, это то, что я сделал бы. Запустите задание cron, которое удалит всех тех, кто никогда не регистрировался в течение определенного промежутка времени (вероятно, поддельный член) и ограничивает количество членов на каждый IP, скажем - 10.Таким образом, вы не можете быть отправлены спам-скриптом kiddie через консоль JS, но вы даете возможность людям в той же сети (IP) создавать несколько учетных записей, если это необходимо. – deb0rian

+0

@Fratyr благодарит за ответ. Это единственный вариант, о котором я могу думать честно, но я открыт для других предложений. Аутентификация анонимного пользователя действительно то, что я прошу, но тогда в чем смысл? – Prometheus

ответ

3

Система не имеет в себе каких-либо недостатков, но обходить ее невозможно. Например, если кто-то хорошо, они могут подделывать IP-адрес, поэтому можно было бы делать несколько учетных записей с одного компьютера, если все, на что вы смотрите, - это ip-адрес. Было бы трудно предотвратить несколько учетных записей, если человек может использовать ложную идентификацию, но вы, возможно, попытаетесь определить активность или ее отсутствие, которые могут сигнализировать поддельному пользователю. Вероятно, лучший способ борьбы с проблемами безопасности с поддельными пользователями - заставить пользователя также предоставлять информацию, такую ​​как адрес электронной почты, и ограничивать количество пользователей под одним адресом электронной почты. Это должно значительно замедлить любые проблемы. Если вы заставляете их «прыгать через обручи», становится сложнее подделать и легко отслеживать, если кто-то пытается подделывать учетные записи. Если вы хотите, чтобы пользователи были более анонимными, все, что не позволяет создавать или управлять пользователями в электронном виде, очень помогло бы, поэтому поможет что-то вроде captcha.

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