2013-09-22 2 views
8

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

Я использую Экспресс, PassportJS & MongoDB (Mongoose) как мой backend. Разумеется, они не смогут взаимодействовать с страницами администратора, поскольку существует аутентификация на стороне сервера при создании, удалении, но я бы предпочел даже не обслуживать страницы для пользователя, если у них нет надлежащий доступ. Поскольку приложение полностью поддерживает JS на стороне клиента, я думаю, что это невозможно, потому что люди могут просто изменить маршрутизацию и многое другое. Каков наилучший способ сделать это? Спасибо за любой вклад!

+0

наилучшим образом будет следовать этому подходу http://stackoverflow.com/questions/16139660/angularjs-basic-example-to-use-authentication-in-single- page-application/16140005 # 16140005 –

+0

Не показывать пользователю то, что пользователь не должен видеть:

ответ

0

Почему вы «предпочитаете» не обслуживать эти страницы для пользователей, не являющихся администраторами? У вас есть настоящая причина заботиться об этом, кроме какого-то инстинкта, что вы должны прекратить людям видеть вещи, которые они не «предполагают» видеть?

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

+3

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

+1

Вы утверждаете, что это «бессмысленно», но не противоречит аргументам. В чем важны ваши данные, а не HTML на страницах вашего администратора. Любые усилия, направленные на обеспечение последнего, - это театр безопасности, который ничего не делает, и это пустая трата времени и денег вашего работодателя. –

+2

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

4

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

$routeProvider 
.when('/profile', { 
    templateUrl: 'views/profile.html', 
    controller: 'ProfileCtrl', 
    resolve: { 
    validate: function($q, $location) { 
     // Either you could maintain an array of hashes on client side 
     // a user do not have access to without login 
     // Or hit the backend url to check it more securely 
     var validateAccess = $q.defer(); 
     var isAllowed = ['profile', 'index', 'dashboard'].indexOf($location.hash()) !== -1; 

     if (!isAllowed) { 
     $location.path('/login'); 
     } 

     validateAccess.resolve(); 
     return validateAccess.promise; 
    } 
    } 
}) 
.otherwise({ 
    redirectTo: '/' 
}); 
+0

Это ничего не решит, не так ли? Вы все еще можете потребовать html/css для страниц администратора вручную. –

2

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

-1

Я согласен с проблемами Криса Руссо. Это касается проблемы безопасности. Если вы используете угловой для своего интерфейса, вам нужна инфраструктура, которая имеет сильные возможности для защиты вашего приложения, если кто-то пытается атаковать ваш веб-сайт/приложение. Я порекомендую Spring framework (spring_security), который он доказал, защищая ваше веб-приложение. Для каждого пользователя должны быть назначены роли, такие как ROLE_USER или ROLE_ADMIN. Я не буду подробно разбирать, как это сделать, но это поможет решить ваши проблемы. :)

0

То, как я это делаю, помещает angularJS html в JSP-страницу и проверит сеанс. Если проверка сеанса обеспечивает доступ. Я не уверен, что это правильный путь. Другой способ: использовать JSP, но с каждым ударом API, проверить сеанс на сервере, иначе вернуть false. Еще один способ заключается в первом входе в систему, получить автогенерированный ключ, хранить на сервере и клиенте оба, проверять каждый хит API.

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