6

私は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")
        }
    }
}
4

1 に答える 1

11

はい、あなたは正しいです-これは安全ではありません。そのようなことは絶対にしないでください。

  • プレーンパスワードをデータベースに保存しないでください(「my_password_123」など)
  • いかなる種類の機密情報もクライアントに返さず、JavaScriptで秘密の計算を実行しないでください
  • providedPassword == stored passwordサーバーまたはクライアントコードで単純なパスワード比較( )を使用しないでください
  • 安全でない(http)レイヤーは絶対に使用しないでください-代わりに安全なレイヤー(HTTPS)を使用してください

これを行う適切な方法は次のとおりです。

  1. パスワードのハッシュ値を生成してDBに保存します。強力なハッシュアルゴリズムとソルトパスワードを使用してください。この返信を書いている時点では、SHA-256で十分ですが、それでも安全であると見なされているかどうかを確認してください。
  2. SSL証明書を配線してHTTPSサポートを取得します。そうすれば、ユーザーがサーバーに送信する内容をスパイすることはありません。
  3. ユーザーが入力username+passwordし、サーバー上のコードに送信します。サーバーでSHA-1ハッシュを計算し、DBに保存されている値と比較します。次に、認証の結果をクライアントに送り返し、永続セッションによってサーバー上でそれを追跡します。

これらのほとんどは、SpringSecurityなどの一部のセキュリティフレームワークによって実行されることに注意してください。セキュリティのトピックは広大であり、悪意のあるユーザーが使用する可能性のある間違いを犯しやすいため、すべてを最初から行うことはお勧めしません。

于 2013-02-07T15:48:18.447 に答える