簡體   English   中英

使用AngularJS安全處理登錄的最佳方法是什么

[英]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")
        }
    }
}

是的,你是對的 - 這不安全 永遠不要做這樣的事情:

  • 切勿在數據庫中存儲普通密碼(如“my_password_123”)
  • 切勿將任何類型的敏感信息返回給客戶端,並在JavaScript中執行秘密計算
  • 切勿在服務器或客戶端代碼中使用簡單的密碼比較( providedPassword == stored password
  • 永遠不要使用不安全(http)層 - 改為使用安全(HTTPS)

這樣做的正確方法如下:

  1. 在DB中存儲密碼時生成密碼的哈希值。 確保使用強哈希算法和鹽漬密碼。 在撰寫本回復時,SHA-256就足夠了,但請務必檢查它是否仍然被認為是安全的。
  2. 連接SSL證書以獲得HTTPS支持,這樣任何人都不會監視用戶發送到您的服務器的內容
  3. 用戶輸入username+password並將其發送到服務器上的代碼。 在服務器上,您計算SHA-1哈希並將其與DB中的存儲值進行比較。 然后,您將身份驗證的結果發送回客戶端,並通過持久會話在服務器上保留它的跟蹤。

請記住,大多數這些東西都是由一些安全框架完成的,比如Spring Security 我不建議從頭開始做這一切,因為安全性主題很多,而且很容易犯惡意用戶可以使用的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM