2014-02-06 73 views
1

不久之前,我遇到了一個關於AngularJS認證的教程。他們創造了一個AuthenticationService,看上去有點像這樣:

angular.module("auth").factory("AuthenticationService", function ($http, $sanitize) { 

    function sanitizeCredentials(credentials) { 
     return { 
      username: $sanitize(credentials.username), 
      password: $sanitize(credentials.password) 
     }; 
    } 

    return { 
     login: function (credentials) { 
      return $http.post("auth/login", sanitizeCredentials(credentials)); 
     } 
    }; 
}); 

所以你看到的,$sanitize服務是用來消毒的用戶名和密碼。到目前爲止這麼好,但在這裏使用它真的有意義嗎?據我所知,$sanitize用於用戶輸入立即顯示在HTML內。但是當我向服務器發送消息時,在前端進行消毒是非常有用的。因爲任何人都可以重寫這部分,所以我需要再次在服務器上執行此操作。那麼爲什麼不直接發送它來消毒並在後端做重要的事情呢?

回答

2

你的問題似乎有兩個部分。

關於$sanitize立即顯示,不知道這意味着什麼,B/C你可能有ng-model捕獲用戶名。

關於從客戶端發送一個經過清理的用戶名/密碼而不是在服務器上執行,這是一個合理的問題。技術上你也可以做。海事組織這是一個保持用戶輸入始終清晰的問題。所有投入都應在最早的時候進行健全檢查。像憑證這樣的關鍵部分應該有兩層理智,以免一個人無意中消失。或者更糟糕的是,在你的兩個(或更多)理智層中的一箇中發現了一個攻擊向量。

回想一個衆所周知的ldap攻擊矢量,其中用戶名如im-a-user)&&()。緊隨其後的an和null是一個漏洞。爲什麼當這些字符串可以在輸入點被擦掉時會漂浮在其周圍?