【问题标题】:Proper use of AngularJS' $sanitize service?正确使用 AngularJS 的 $sanitize 服务?
【发布时间】:2014-02-07 00:17:50
【问题描述】:

不久前,我遇到了一个关于 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。但是当我向服务器发送一些东西时,在前端对其进行清理真的有用吗?由于任何人都可以覆盖这部分,因此无论如何我都需要在服务器上再次执行此操作。那么,为什么不直接发送它而不进行清理,然后在后端做重要的事情呢?

【问题讨论】:

    标签: javascript security angularjs sanitization


    【解决方案1】:

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

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

    关于从客户端发送经过清理的用户名/密码而不是在服务器上发送,这是一个合理的问题。从技术上讲,你可以做任何一个。 IMO 问题在于始终从代码的 pov 中保持用户输入干净。所有输入都应尽早进行完整性检查。像凭证这样的关键部分应该有两层理智,以免不经意间消失。或者更糟的是,在您的两个(或更多)健全层之一中发现了攻击向量。

    回想一下众所周知的 ldap 攻击向量,其中用户名读取为 im-a-user)&&()。紧接括号后跟 an 和 null 是一种利用。当这些字符串可以在输入点被擦掉时,为什么会有这样的字符串浮动?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      • 2013-03-25
      • 1970-01-01
      • 2015-03-27
      • 1970-01-01
      相关资源
      最近更新 更多