用户登录系统后如何保护单页应用程序?

时间:2018-02-22 14:52:29

标签: javascript logging browser coldfusion single-page-application

我为单页应用创建了登录页面。到目前为止,我有Ajax调用,将检查是否存在用户名并检查其密码。如果用户在AJAX调用返回后通过所有安全步骤并且成功,我将它们重定向到主页面。此页面应包含我的SPA的所有元素。我希望防止的一些事情是前进/后退或点击浏览器中的重新加载按钮。到目前为止,如果他们登录并且系统将他们重定向到主页面,他们可以使用这些按钮并仍然会保持登录状态。在我看来,这可能会导致一些问题,并可能存在安全风险。此外,我在主页面的顶部有一些安全步骤,我正在使用ColdFusion来检查用户是否已登录。这是我到目前为止的例子:

处理登录的JQuery:

$('#ha_login').on('submit', function(e){
    e.preventDefault();
    var frmUN = $.trim($('#username').val()),
        frmPW = $('#password').val();

    $.ajax({
        type: 'POST',
        url: 'Authentication.cfc?method=checkLogin',
        data: {'username':frmUN,'password':frmPW},
        dataType: 'json'
    }).done(function(obj){
        if(obj.STATUS == "200"){
            location.href = 'Application/MainPage.cfm';
        }else{
            location.reload(true);
        }
    }).fail(function(jqXHR, textStatus, errorThrown){
        alert("Error: "+errorThrown);
    });
});

Authentication.cfc:

<cffunction name="checkLogin" access="remote" output="false" returnformat="JSON">
        <cfset fnResults = structNew()>

        <cfquery name="checkUser" datasource="#Application.dsn#">
            SELECT UserName, Password
            FROM Users
            WHERE UserName = <cfqueryparam cfsqltype="cf_sql_varchar" value="#trim(FORM.username)#" maxlength="50">
                AND Active = 1
        </cfquery>

        <cfset storedPW = checkUser.Password>
        <cfset enteredPW = FORM.password>

        <cfif checkUser.recordCount NEQ '1' OR enteredPW NEQ storedPW> 
            <cfset fnResults.status = "400">
            <cfset fnResults.message = "<strong>Error!</strong> Invalid Username or Password!">
        <cfelse>
            <cfset SESSION.loggedin = true>
            <cfset fnResults.status = "200">
        </cfif>

        <cfreturn fnResults>
    </cffunction>

这是我最后的Main.cfm页面:

<cfif !structKeyExists(SESSION, "loggedin") OR SESSION.loggedin EQ false>
    <cflocation url="Login.cfm" addToken="false">
</cfif>
<h3>Welcome to My Application.</h3>

我想知道在Main.cfm的安全步骤中是否还有其他内容?还有一种方法可以防止/检测用户何时尝试离开Main.cfm?如果他们这样做,我会注销该用户并将其重定向到登录页面。如果有人可以提供帮助或有一些有用的例子,请告诉我。提前谢谢!

1 个答案:

答案 0 :(得分:0)

尝试onbeforeunload事件:在卸载页面之前触发它。它还允许您回询用户是否真的要离开。请参阅演示onbeforeunload Demo

或者,您可以在他离开时发出Ajax请求。