[英]What is the best way to safely process a login using AngularJS
我是Angular的新手。 我正在開發一個簡單的登錄表單,其中輸入的用戶名與從JSON查詢返回的用戶名進行比較。 如果找到匹配項,則處理登錄。
我覺得我這樣做的方式並不安全,我是否認為可以通過瀏覽器的控制台訪問返回的JSON字符串?
一旦我理解了如何正確地解決這個問題,我將在不久的將來為此添加密碼檢查。
我想指出正確的方向來解決用戶登錄Angular方式的問題。
app.js
angular.module('userApp', ["ngResource"]).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/login', {templateUrl: 'partials/login.html', controller: LoginCtrl}).
when('/loggedin', {templateUrl: 'partials/user-admin.html', controller: UserCtrl}).
otherwise({redirectTo: '/login'});
}],[ '$locationProvider', function($locationProvider) {
$locationProvider.html5Mode = true;
}]).
factory("User", function($resource) {
return $resource("users/:userId.json", {}, {
query: {method: "GET", params: {userId: "users"}, isArray: true}
});
});
controllers.js
function LoginCtrl($scope, $route, $routeParams, $location, User) {
$scope.users = User.query();
$scope.loginUser = function() {
var loggedin = false;
var totalUsers = $scope.users.length;
var usernameTyped = $scope.userUsername;
for( i=0; i < totalUsers; i++ ) {
if( $scope.users[i].name === usernameTyped ) {
loggedin = true;
break;
}
}
if( loggedin === true ) {
alert("login successful");
$location.path("/loggedin");
} else {
alert("username does not exist")
}
}
}
是的,你是對的 - 這不安全 。 永遠不要做這樣的事情:
providedPassword == stored password
) 這樣做的正確方法如下:
username+password
並將其發送到服務器上的代碼。 在服務器上,您計算SHA-1哈希並將其與DB中的存儲值進行比較。 然后,您將身份驗證的結果發送回客戶端,並通過持久會話在服務器上保留它的跟蹤。 請記住,大多數這些東西都是由一些安全框架完成的,比如Spring Security 。 我不建議從頭開始做這一切,因為安全性主題很多,而且很容易犯惡意用戶可以使用的錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.