Рейтинг:
1
Richard Deeming
То, что вы описали, - это небезопасная прямая ссылка на объект:
Топ-10 2013-A4-небезопасные прямые ссылки на объекты-OWASP[^]
Использование последовательного номера для доступа к данным для различных записей делает тривиальным для злоумышленника угадать URL-адрес для данных других пользователей.
Вы можете сделать их жизнь сложнее, добавив идентификатор GUID[^] ключ к записи, и только с помощью этого ключа можно получить данные.
Но только реальный" решение заключается в том, чтобы ваш код проверял, что пользователь, делающий запрос, имеет разрешение на доступ к запрашиваемым данным. Как вы это сделаете, будет зависеть от структуры вашей базы данных и механизма аутентификации.
Member 9129971
Я подумал об идее guid, но, как вы сказали,она не является надежной.А для второго пункта у меня есть два варианта
первый вариант:используйте случайно сгенерированный токен
во время входа в систему пользователь предоставит логин-пароль, после успеха предоставит ему токен и для следующих вызовов api пользователь будет использовать токен.Этот токен сохраняется в базе данных вместе с идентификатором пользователя, также этот токен имеет время истечения срока действия.после истечения срока действия токен истечет, и пользователь должен будет повторно войти в систему, чтобы получить новый токен.
Теперь нам не нужно выставлять userid, и мы можем просто предоставить данные пользователю против его динамического токена expirable.
второй вариант:используйте JWT или owin identity token
Для этого пользователь предоставит имя пользователя пароль во время входа в систему и получит токен волшебным образом и генерацию токена за кулисами.
то , что вы считаете лучшим подходом, это не о моей базе данных или механизме аутентификации, это нормальная проблема безопасности веб-api.
первая техника проста, поэтому я хотел бы пойти с этим, так как у меня очень ограниченное время, поэтому трудно научиться другому способу, если он действительно не нужен.
что вы порекомендуете, первый вариант безопасен или нет?
Richard Deeming
До тех пор, пока ваш API доступен только по протоколу HTTPS, первый вариант должен быть в порядке. Это аналогичная идея "cookie аутентификации форм", которую вы бы использовали на обычном веб-сайте, за исключением лучшего контроля над тем, когда он отправляется, и, следовательно, лучшей защиты от XSRF.
Но вам все равно нужно будет убедиться, что ваши токены не могут быть угаданы или перехвачены, и что вы не используете повторно просроченные токены.
Рейтинг:
1
Member 12392776
@формат HTML.HiddenFor(модель=>model.Id)
Richard Deeming
Во-первых, это не помешает никому просмотреть удостоверение. Вы можете просто просмотреть источник страницы,и значение будет там.
Во-вторых, в нем отсутствует проблема. Если идентификаторы записей представляют собой последовательный номер и на сервере нет проверок доступа, злоумышленнику просто нужно продолжать пытаться получить следующий номер, чтобы получить данные других пользователей.
Member 9129971
во-вторых, предположим, что для злоумышленника мы добавили аутентификацию , и злоумышленник не может войти в систему , но любой пользователь, предоставивший пароль имени пользователя, получит аутентифицированный токен, и теперь этот пользователь может просто угадать какой-то другой идентификатор пользователя и получить его данные, так как этот пользователь аутентичен для системы.Таким образом, проблема заключается не в неизвестном злоумышленнике, а в аутентифицированном пользователе.