javascript - 使用 AngularJS 安全处理登录的最佳方法是什么

标签 javascript 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 中执行 secret 计算
  • 永远不要在服务器或客户端代码中使用简单的密码比较(providedPassword == stored password)
  • 切勿使用不安全的 (http) 层 - 请改用安全层 (HTTPS)

正确的做法如下:

  1. 生成密码的哈希值并将其存储在数据库中。确保使用强哈希算法和加盐密码。在撰写此回复时,SHA-256 就足够了,但请务必检查它是否仍被认为是安全的。
  2. 连接 SSL 证书以获得 HTTPS 支持,这样就没有人会监视用户向您的服务器发送的内容
  3. 用户输入用户名+密码并将它们发送到服务器上的代码。 在服务器上 您计算 SHA-1 哈希并将其与数据库中的存储值进行比较。然后将身份验证的结果发送回客户端,并通过持久 session 在服务器上跟踪它。

请记住,大部分内容都是由一些安全框架完成的,例如 Spring Security .我不建议从头开始,因为安全主题涉及面很广,而且很容易犯下可被恶意用户利用的错误。

关于javascript - 使用 AngularJS 安全处理登录的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14754998/

相关文章:

html - 存在警报时的条件间隔

node.js - 警告 : Task "karma" not found when running grunt test

javascript - 具有可变内容的 jQuery 选择器

javascript - 防止 Angular 转义 HTML

javascript - JS如何对包含多个数值的数组使用reduce

angularjs - Angular-Material "md-datepicker"指令 - "md-open-on-focus"问题

javascript - 在 Html 中访问 Angular 范围

javascript - 回调返回未定义的meteor.call

javascript - 如何找到创建特定文本的 li 并隐藏他和下一个 parent sibiling?

javascript - 通过 javascript 添加元素后,CSS 渐变不填充容器