mod_security: 사용자를 추적하여 로그인 실패 페이지로 리디렉션되는지 확인

mod_security: 사용자를 추적하여 로그인 실패 페이지로 리디렉션되는지 확인

사용자가 웹 애플리케이션에 로그인하지 못할 때 로그인해야 합니다. 불행하게도 이 웹 애플리케이션은 기본적으로 이 작업을 수행할 수 없으며 변경할 수도 없습니다.

이제 나는 mod_security를 ​​실험하고 있습니다. 내 생각은 POST 요청을 추적하고 사용자 이름을 추출한 다음 사용자가 "로그인 실패" 페이지로 리디렉션되는지 확인하는 것입니다.

나는 가지고있다:

<Location /login.php>
       # Sanitize password variable value
       SecAction nolog,phase:2,sanitiseArg:password

       SecRule REQUEST_BODY "username=(.*)&password" "capture,log,logdata:'login submitted: user %{TX.1}'"
</Location>

그리고

<Location /loginfailed.php>
       # Filter und log redirects to loginfailed
       SecRule RESPONSE_BODY "loginfailed.php" "phase:4,t:none,log,logdata:'login failed: %{TX.1}'"
</Location>

그러나 물론 "TX.1"은 두 번째 필요할 때 이미 설정되어 있지 않습니다.

누구든지 이 문제를 해결하는 방법에 대한 힌트를 줄 수 있습니까?

감사해요!

답변1

웹 앱이 리디렉션(예: 쿼리 문자열 /loginfiled.php?username=foobar또는 쿠키)에 사용자 이름에 대한 정보를 포함하지 않는 한 요청에서 사용자 이름을 추출할 수 있는 방법이 없습니다 /loginfailed.php. 추출할 수 있는 정보가 없습니다. HTTP는 상태 비저장이므로 클라이언트가 username=fooPOST 요청의 본문을 전송하여 302 리디렉션이 발생하는 경우 후속 요청은 /loginfailed.php이전 요청에 대해 아무것도 모릅니다.

이 웹 앱이 302 또는 303 대신 307 리디렉션을 사용하는 경우 후속 요청은 /loginfailed.php모두 동일한 데이터가 포함된 POST 요청이 됩니다. 나는 이것이 거의 불가능할 것이라고 예상합니다.

쿠키나 세션 저장소를 살펴보고 사용자 이름이 있는지 확인하세요. (세션 저장소를 읽을 수 있는지는 잘 모르겠지만 mod_security거기에 있다는 것을 안다면 뭔가 알아낼 수 있을 것이라고 확신합니다.)

CustomLog후속 요청이 아닌 원래 요청 중에 로그인 시도가 성공했는지 실패했는지 기록하는 데 더 많은 행운이 있을 수 있습니다 .

LogFormat "%h %t \"%r\" %>s %{Location}o %{PHPSESSID}C %{UNIQUE_ID}e" loginslog
CustomLog "/var/log/apache2/logins.log" loginslog

Location:또는 를 사용하여 일반 로그에 헤더와 고유 ID를 추가할 수도 있습니다 %{Location}o %{UNIQUE_ID}e. mod_security모든 로그에 고유 ID가 포함되어 있어 다른 로그와 쉽게 일치시킬 수 있습니다.

로그인에 실패한 모든 사용자 이름의 일관된 로그를 생성하는 것은 모든 Location:.*/loginfailed.php행을 파악한 logins.log다음 고유 ID를 기존 mod_security 기반 로그의 사용자 이름과 일치시키는 문제입니다.

관련 정보