2009-02-24 6 views
15

분명히 로그인 시도를 제한하는 일종의 메커니즘은 보안에 필수적입니다. 시도 사이에 기하 급수적으로 늘어나는 시간의 개념이 마음에 들지만 정보를 저장하는 것이 확실하지 않습니다. 나는 또한 captchas를 포함하지 않는 대체 솔루션에 관심이 있습니다.로그인 시도를 제한하고 기록하는 가장 좋은 방법

쿠키를 차단하거나 자동으로 지워지므로 쿠키가 작동하지 않는다고 생각하지만 세션이 작동합니까? 아니면 데이터베이스에 저장해야합니까? 어떤 방법을 사용할 수 있는지/사용 중인지를 알지 못하기 때문에 어떤 것이 실용적인 것인지 간단히 알 수 없습니다.

+0

참조 : http://stackoverflow.com/questions/479233/what-is-the-best-distributed-brute-force-countermeasure – Kzqai

답변

13

사용자 테이블 'failed_login_attempts'및 'failed_login_time'의 일부 열을 사용하십시오. 첫 번째 로그인은 실패한 로그인마다 증가하고 로그인에 성공하면 다시 설정됩니다. 두 번째 방법은 현재 시간과 마지막으로 실패한 시간을 비교할 수있게합니다.

는 등 허용 로그인 사이의 시간을 사용자를 잠글 대기하는 시간을 결정하기 위해 DB에이 데이터를 사용할 수 있습니다 귀하의 코드

+12

또한, 내가 발견 한 것, 잘못된 사용자 이름에 대한 실패한 로그인 시도도 저장해야합니다. 유효한 사용자 이름에 대한 시도가 실패한 경우에만 잠금을 해제하면 유효하지 않은 사용자 이름이 나타납니다. – Andrew

+1

나는 두 가지 기준에 따라 실패를 저장하는 것을 좋아한다 : 유효한 사용자 이름이 사용 되었다면, 사용자 이름과 IP에 실패를 세고 그렇지 않으면 IP에 실패를 세면된다. 특정 계정이 공격 당하면 특정 IP와 독립적으로 계정을 잠그고 모든 악의적 인 단일 IP는 프로세스에서 사이트 전체 잠금을받습니다. 잠금을위한 명시적인 만료 시간을 저장하고 각 시도에서 잠금 만료를 갱신하는 것도 중요합니다. –

6

google이 필요한 유용성 테스트 (부당한 가정이 아님)를 가정하고 captcha를 사용하기로 결정했다면, 나는 그들과 함께 할 것을 제안합니다. 내가

+1

동의합니다. * 필수가 아닌 서비스 * 시간 초과가 증가하는 것은 매우 실망 스럽습니다. –

3

저장 시도 (특히 나에게 많이 발생하는 많은 웹 사이트와 관련 암호로) 정품 사용자입니다 내 비밀번호를 잊어 버린 경우

증가 제한 시간은 데이터베이스가 최고에 실망 솔루션 IMHO는 보안 위반 시도에 대한 감사 기록을 제공하므로 유용합니다. 신청서에 따라 법적 요구 사항 일 수도 있고 그렇지 않을 수도 있습니다.

악의적 인 시도를 모두 기록하면 IP 주소를 차단할 수 있도록 한 IP 주소에서 요청 (예 : 누군가/무언가가 무차별 공격을 시도하고있는 경우)과 같은 상위 수준의 정보를 수집 할 수도 있습니다. 이것은 매우 유용한 정보가 될 수 있습니다.

임계 값을 결정한 후에는 이메일 주소 (즉, '비밀번호를 잊어 버렸습니다'와 유사)로 보내도록 요청하거나 CAPCHA 방식으로 이동할 수 있습니다.

1

어떤 사용자 ID가 맞았는지 알고 플래그를 유지하고 임계 값에 도달하면 해당 사용자에 대해 아무 것도받지 않습니다. 그러나 이는 모든 사용자에 대해 추가 데이터 값을 저장한다는 의미입니다.

나는 [...] 대신 기하 급수적으로 증가하는 시간을 사용

, 당신은 실제로 연속 시도 사이의 무작위 지연을 가질 수, 시도 사이에 기하 급수적으로 증가하는 시간의 개념을 좋아한다.

여기에 사람들을 사용하는 기술을 설명하면 더 구체적인 예를 도울 수 있습니다.

1

서버 쪽 정보를 저장하십시오. 이렇게하면 분산 된 공격 (여러 시스템에서 발생)을 방어 할 수 있습니다.

1

당신은 블록 약간의 시간에 대한 로그인이 말하는 말을하실 수 있습니다 예를 들어 10 분 예를 들어 3 번의 실패 시도 후에 기하 급수적으로 증가하는 시간은 나에게 좋게 들립니다. 그리고 네, 정보를 서버 측 세션이나 데이터베이스에 저장하십시오. 데이터베이스가 더 좋습니다. 사용자가 조작하기 쉽기 때문에 쿠키 비즈니스가 없습니다.

다른 사용자가 실패한 시도로 유효한 사용자의 암호를 추측하려고 시도하는 동안 유효한 사용자가 차단 된 메시지를받을 수도 있으므로 클라이언트 IP 주소에 대해 이러한 시도를 매핑 할 수 있습니다.

2

잠금 정책은 모두 훌륭하지만 훌륭하지만 균형이 있습니다.

하나의 고려 사항은 사용자 이름의 생성에 대해 생각하는 것입니다. 그들은 모두 열거 될 수 있습니까?

저는 Outlook Web Access/Intranet Services, 특정 Apps를 제공하는 Employee Portal의 dotcom에 대한 External App Pen Test에있었습니다. 사용자 (웹 사이트 자체의 Exec/Managament Team 및 Google, Facebook, LinkedIn 등)를 열거하는 것은 쉽습니다. 일단 당신이 사용자 이름 로그온 (firstname 다음 성 하나의 문자열로 입력 한)의 형식을 가지고 나는 그들의 3 스트라이크와 아웃 정책으로 인해 사용자의 100을 종료 할 수있는 능력을 가지고.

1

이 게시물의 대답은 감사 및 잠금 논리를 편리하게 만드는 레코드 구조를 제공하기 때문에 데이터베이스 중심 솔루션에 우선 순위를 부여합니다.

여기에 답변은 개별 사용자에 대한 공격을 설명하는 것이지만이 접근 방식의 주요 관심사는 시스템을 Denial of Service 공격에 개방 상태로 두는 것입니다. 모든 세계의 모든 요청은 이 아니며 트리거 데이터베이스가 작동해야합니다.

비싸고 불필요 할 수있는 잠금 작업을 수행하지 못하도록 응용 프로그램과 데이터베이스를 보호하려면 req/res주기의 앞부분에 대체 보안 계층 ​​(또는 추가 계층)을 구현해야합니다.

Express-Brute은 Redis 캐싱을 사용하여 정직한 메시지를 허용하면서 악성 요청을 걸러내는 훌륭한 예입니다.

관련 문제