2014-10-09 4 views
1

Grails 애플리케이션에서 인증 및 권한 부여를 위해 Spring Security 플러그인을 사용하고 있습니다. 사용자는 암호를 무한정 시도 할 수 있습니다. 무차별 공격에 대한 일종의 방어를 적용하는 구성 설정이 있습니까? 예를 들어, 10 번 시도한 후 사용자에게 로그인 시도를 허용하지 않습니까?스프링 보안이 어떻게 브 루트 포스를 방어 할 수 있습니까?

+1

당신은 확실히 사용자 정의 할 수 있습니다 [로그인 이벤트] (http://grails-plugins.github.io/grails-spring-security-core/guide/events.html)를 듣는 것으로 – doelleri

답변

2

간단히 말해서 스프링 시큐리티는 계정에 대한 무차별 대입 시도를 막기위한 구현을 제공하지 않습니다.

그러나 사용자를 보호하기위한 전략을 구현할 수있는 방법을 제공합니다. 일반적으로 실패한 인증 이벤트에서 콜백을 구현해야합니다. 여기에서하는 일은 귀하의 신청에 적합한 행동 방침이 무엇인가에 달려 있습니다. 일부 응용 프로그램은 단순히 실패한 시도의 세션 변수를 증가시키고 임계 값에 도달하면 이후의 시도를 무시합니다.

다른 응용 프로그램은 마지막 실패한 시도와 함께이 정보를 유지하고 일정 기간 내에 특정 횟수 실패한 시도 후에 도메인 인스턴스를 업데이트하여 계정을 잠글 수 있습니다.

documentation이 작업을 수행하는 방법을 설명하는 좋은 일을하지만, 일반적으로는처럼 Config.groovy에 스프링 보안 핵심 플러그인에 대한 이벤트 리스너를 추가 할 것입니다 :

grails.plugin.springsecurity.useSecurityEventListener = true 
grails.plugin.springsecurity.onInteractiveAuthenticationSuccessEvent = { e, appCtx -> 
    // Handle successful login 
} 
grails.plugin.springsecurity.onAbstractAuthenticationFailureEvent = { e, appCtx -> 
    // Handle failed login 
    // example of how to obtain the session if you need it 
    def request = grails.plugin.springsecurity.web.SecurityRequestHolder.getRequest() 
    def session = request.getSession(false) 
} 
+2

또 다른 빠른 승리는'bcrypt'와 비슷한 알고리즘을 사용하고 있습니다. '비용'매개 변수를 선택하면 각 해시를 계산하는 속도가 느려집니다. 따라서 각 사용자의 로그인은 해당 요소 (1 초 미만)로 느려지지만 각 해커 해시 계산에는 그 시간이 오래 걸리므로 처리량에 큰 영향을 미칩니다. 업데이트 : 언급을 잊어 버렸습니다. 이것은 2.0의 기본값입니다. 따라서 새로운 앱은 자동으로 이걸 얻습니다. –

+0

아마도 지수 적 지연을 사용하고 싶을 것입니다. 즉, 3 또는 5 또는 10 개의 빠른 시도와 잠금을 허용하지 말고 1 일 후에 약간의 지연이 생기고 이전의 것보다 느리게 만듭니다. 사용자가 잘못 입력하면 성가 시겠지만 자동화 된 공격의 경우 속도가 크게 느려집니다. 구현이 완료되면 풀 요청에서 변경 사항을 보내 주시고 옵션 기능으로 추가하겠습니다 :) –

+0

@BurtBeckwith Spring Security 용으로 작성된 매우 강력한 암호 정책 및 로그인 정책 확장이 있습니다. 정말로 그들을보고 코어 플러그인에 추가한다고 생각하십니까? 나는 그들을 약간 정리하고 GitHub에 게시해야하지만 그들은 (우리의 필요에 따라) 정말로 잘 작동한다. –

관련 문제