正确使用AngularJS'$ sanitize服务?

时间:2014-02-06 15:42:58

标签: javascript security angularjs sanitization

不久前,我在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服务用于清理用户名和密码。到目前为止一直很好,但在这里使用它真的有意义吗?据我所知,当用户输入立即显示在html中时,使用$sanitize。但是当我向服务器发送内容时,在前端清理它真的很有用吗?由于任何人都可以覆盖这部分,我还是需要再次在服务器上执行此操作。那么为什么不将它发送到未经过消毒处理并在后端进行重要的操作呢?

1 个答案:

答案 0 :(得分:2)

您的问题似乎有两个部分。

关于$sanitize在立即显示时,不确定这意味着什么,b / c您可能会ng-model来捕获用户名。

关于从客户端发送已清理的用户名/密码而不是在服务器上进行,这是一个合理的问题。从技术上讲,你可以做到。 IMO这是一个始终保持用户输入清洁的问题。所有输入都应在最早点进行健全性检查。像证书这样的关键部分应该有两层理智,以免一个人无意中消失。或者更糟糕的是,在您的两个(或更多)健全层之一中发现攻击向量。

回想一下众所周知的ldap攻击向量,其中用户名读作im-a-user)&&()。密切的parens后跟一个和null是一个漏洞利用。为什么这些字符串在输入点被擦洗时会浮动?