不久前,我遇到了一个关于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。但是,当我发送一些东西给服务器时,在前端对它进行消毒真的有用吗?因为任何人都可以覆盖这个部分,所以无论如何我都需要在服务器上再次这样做。那么,为什么不直接送它去消毒,然后在后端做一些重要的事情呢?
发布于 2014-02-06 16:17:50
你的问题似乎有两部分。
对于立即显示的$sanitize,不确定这意味着什么,b/c很可能会有ng-model来捕获用户名。
关于从客户端发送经过消毒的用户名/ passwd,而不是在服务器上这样做,这是一个合理的问题。从技术上说你也可以做到。IMO是一个始终保持用户输入与您代码的pov保持干净的问题。所有输入应在最早的时间点检查是否正确。像凭据这样的关键部分应该有两层理智,以免其中一层不小心消失。或者更糟的是,在两个(或多个)理智层中的一个发现了攻击矢量。
回想一下众所周知的ldap攻击向量,其中用户名读起来像im-a-user)&&()。紧跟a和null的关闭父类是利用漏洞。为什么这样的字符串可以在输入点被擦洗,却又四处飘浮呢?
https://stackoverflow.com/questions/21607383
复制相似问题