2014-02-06 5 views
1

얼마 전에 AngularJS의 인증에 대한 자습서를 보았습니다. 보시다시피 그래서, $sanitize 서비스가 사용자 이름뿐 아니라 암호를 소독하는 데 사용됩니다

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)); 
     } 
    }; 
}); 

을 : 그들은이 같은 종류의 안쪽의 AuthenticationService를 만들었습니다. 지금까지는 그렇게 좋았지 만 여기에서 사용하는 것이 실제로 의미가 있습니까? 내가 아는 한, $sanitize은 사용자 입력이 html 내에 즉시 표시 될 때 사용됩니다. 하지만 서버에 뭔가를 보낼 때 프론트 엔드에서 위생 처리하는 것이 정말 유용할까요? 누구나이 부분을 무시할 수 있으므로 어쨌든 서버에서이 작업을 다시 수행해야합니다. 그렇다면 단순히 위생 처리되지 않은 상태로 발송하고 백엔드에서 중요한 작업을 수행하지 않는 이유는 무엇입니까?

답변

2

질문에 두 부분이있는 것 같습니다.

$sanitize과 관련하여 즉각적으로 표시 될 경우, 이것이 의미하는 바가 확실하지 않으면 b/c 사용자 이름을 캡처하는 데 아마도 ng-model이있을 것입니다.

위생 된 사용자 이름/passwd를 서버에서 보내는 것이 아니라 클라이언트에서 보내는 것에 관해서는 합당한 질문입니다. 기술적으로 당신도 그 중 하나를 할 수 있습니다. IMO는 코드의 pov에서 사용자 입력을 항상 깨끗하게 유지하는 문제입니다. 모든 입력은 초기 단계에서 온 전성 검사를 받아야합니다. 신임장과 같은 중요한 부분은 우연히 사라지지 않도록 두 단계의 온 전성을 가져야합니다. 또는 두 개 (또는 그 이상)의 정상 레이어 중 하나에서 공격 벡터가 발견됩니다.

사용자 이름이 im-a-user)&&()과 같이 잘 알려진 ldap 공격 벡터를 생각해 내십시오. 그 다음에 null과 null이 오는 닫는 괄호는 익스플로잇입니다. 왜 이러한 문자열이 입력 지점에서 제거 될 수있을 때 주위에 떠 다니는가?