0

Мой вопрос очень похож на этот Return “correct” error code, or protect privacy?, но я хотел бы услышать несколько разных ответов.Http 403 или 404 для доступа к ограниченному ресурсу WEB?

У нас есть WEB-сайт, большинство страниц которого могут быть посещены неавторизованным пользователем. Но когда пользователь не выполнил вход в систему, пользователь пытается получить доступ к ресурсу (страница), требующему авторизации (пользователь должен иметь роль FooRole), мы автоматически перенаправляем его на страницу входа в систему и после предоставления правильных учетных данных возвращаются к ограниченным ресурсам. Какой веб-сайт должен делать, если пользователь предоставил правильные учетные данные, но его права доступа оказались недостаточными (у него есть BarRole, но не FooRole)?

В текущей реализации мы возвращаем ответ HTTP 403 (запрещен). Но некоторые разработчики утверждают, что код 404 должен быть возвращен, поскольку он обеспечивает лучшую защиту. Пользователь не должен отличать существующие и недоступные ресурсы. С точки зрения безопасности, возможно, лучше вернуть 404, но в описанной ситуации пользователь был перенаправлен на страницу входа и что поведение «подсказывает», что такая страница существует, поэтому она не очень логично возвращает 404 (это мои мысли). Если пользователь уже авторизовался и пытается получить доступ к ограниченным ресурсам (напрямую изменяя URL), то, возможно, он может логически вернуть ошибку 404.

Может быть, такая функция автоматического перенаправления на вход не работает? Можете ли вы предложить мне, какое поведение более «стандартное/хорошее/удобное для пользователя/без взлома» в такой ситуации?

Спасибо!

+0

Возможный дубликат [403 Запретный vs 401 Несанкционированные HTTP-ответы] (http://stackoverflow.com/questions/3297048/403-forbidden-vs-401-unauthorized-http-responses) – kenorb

ответ

1

Я считаю, что больше подходит для возврата точного кода ошибки 403 для ошибок входа.

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

Если важно обфускать имена файлов, я бы рекомендовал вернуть 403 для любого файла в папке (Существующий или нет) для не прошедших проверку пользователей (по сути, вы отказываете им в доступе, чтобы увидеть, что находится в папке, поэтому код ошибки кажется мне законным). Я бы рекомендовал сделать это с помощью обработчика CustomErrors, который отличает, вошли ли вы в систему или нет, прежде чем решить, сколько вам сказать (таким образом, вы все равно сохраняете точные ошибки 404 для людей, прошедших проверку подлинности) или HttpModule, улавливая исключение a 404 выбрасывает и создает другой результат для аутентифицированных и не прошедших проверку пользователей.

+0

С другой стороны, существуют чтобы не допустить, чтобы кто-нибудь знал, что существуют определенные файлы. IIRC, когда Survivor был новым телевизионным шоу, кто-то обнаружил, кто выиграл до конца сезона, обнаружив, что файлы, не зарегистрированные в списке, и файлы шляп не сделали. В качестве альтернативы, финансовые отчеты не могут быть разрешены, но хорошие и плохие заявления могут иметь разницу в имени файла - или когда они подготовлены раньше. Таких боковых каналов можно было избежать, даже не заявив, что файл существует ... – atk

+0

О, и важно отметить, что безопасность требует хранения секретов. Он почти читается, как ваш пост смешивает это с истинной «безопасностью через неизвестность», которая будет делать что-то полностью доступным, но не сообщать об этом никому - отличается от OP, где доступ * отрицается *, но безопасность через неясность не будет запретить доступ, поскольку ресурс в противном случае будет незащищенным. – atk

+1

Да, я считаю, что я думаю, что если бы пользователи знали, что файл существует, он увеличивает свои шансы взлома сайта, нацеливая на них, а не на то, что имя файла фактически содержит личную информацию (В этом случае я не думаю, что безопасность была значительной). В ваших примерах я вижу потенциал сценариев, когда вы будете обслуживать 404 или, возможно, просто перенаправляете пользователя на комбо-страницу 403/404 («Либо этот файл не существует, либо у вас нет доступа для его просмотра «и не рассказывайте им, какие). – fyjham