1

양식 인증 inmy ASP.NET 2.0 웹 사이트를 사용하고 있습니다. 오늘 시험을 치르면서 나는 큰 문제에 직면했다.양식 인증 관련 문제

인증 후 기본 페이지 인 createuser.aspx가 있습니다. 그 페이지에서 나는 새로운 사용자를 만들고 있습니다. 잘 작동합니다.

모든 세션을 지우고 로그인 페이지에서 리디렉션하는 로그 아웃 버튼이 있습니다. 모두 잘 작동했다.

테스트하는 동안 나는 fiddler의 request builder 옵션에서 createuser.aspx url을 드래그 앤 드롭하고 피들러 내에서 텍스트 상자 값을 변경 한 후 실행을 클릭합니다. 정보가 데이터베이스에 저장되어있어 충격을 받았습니다.

로그 아웃 후 모든 sesission/cookies가 만료되고 바이올린이 작동해서는 안되기 때문에 asp.net 폼 인증에서 중요한 것을 놓치고 있다는 것을 의미합니다.

여러분 모두 내 문제를 이해하시기 바랍니다. 해결책을 찾도록 도와주세요. 인증 쿠키가 의심 스럽습니다. 나는 옳은지 모르겠다.

+0

로그 아웃 코드를 표시 할 수 있습니다 .... –

+0

안녕하세요, "정보가 데이터베이스에 저장된다는 사실에 놀랐습니다"- 사용자 생성 페이지에서해야 할 일이 아닌가요? 사용자 만들기 화면이 인증 된 사용자에 의해서만 호출되는 것으로 가정합니까? 로그인하지 않은 상태에서 브라우저에서이 페이지에 연결할 수 없다고 가정합니다. Fiddler에서 요청 및 응답 헤더를 게시 할 수 있습니까? –

+0

벤, 나는 바이올린이 프록시라는 것을 알고 있고 우리가 작성하고 컨트롤에서 선택하는 모든 텍스트가 거기에 표시되어 있습니다. 실제로 암호는 일반 텍스트로 볼 수 있습니다. 우리가 SSL을 사용하지 않기 때문에 그 이유가 될 수 있습니다. 양식에서 로그 아웃 한 후 피들러에서 createuser 요청을 "requestbuilder"로 끌면 요청을 실행하고 제어 값을 변경할 수도 있습니다. 이제는 문제가 내가 로그 아웃 양식에서하지만 그 후 나는 바이올린을 사용하여 값을 저장할 수 있습니다. 어떤 일이 일어나지 말아야합니까? 당신의 의견은 무엇입니까? –

답변

1

웹 앱에서 로그 아웃하면 쿠키가 삭제됩니다. 그렇습니다.

그러나 피들러의 이전 요청을 끌어 요청 빌더에 떨어지는 는 인증 쿠키를 복사합니다.

즉, Fiddler에서 요청을 실행하면 다시 인증 된 인증 쿠키가 전송되므로 CreateUser.aspx의 작업이 실제로 실행되고 새 사용자 세부 정보가 저장됨을 의미합니다 데이터베이스에.

Fiddler의 Request Headers 섹션에서 .ASPXAUTH = 다음을 시작하는 쿠키 부분을 제거합니다. 그리고 아마도 ASP.NET_SessionId 값 또한 예상대로 작동합니다.

이러한 종류의 동작이 가능하지 않게하려면 일종의 "Logged In This Session"플래그를 저장하고 로그 아웃을 지우고 확인하십시오 삽입을 수행하기 전에 CreateUser (또는 여러 페이지에서이 동작이 필요한 경우 기본 클래스)의 코드 숨김 값.


편집 댓글에 응답 :

몇 가지가 당신을 도울 것입니다 :

  1. 는 SSL 아래에있는 사이트의이 부분을 넣어 - 따라서 열심히위한 많은 것 트래픽을 가로채는 사람 (불가능한 것은 아님)은 실제로 중간자 공격을 수행하고 클라이언트에게 정보를 해독 할 수있는 자체 생성 된 인증서를 제공 할 수 있습니다.

  2. 위에서 말했듯이 사용자가 쿠키로부터 인증 받았는지, 그리고 일부 세션 값이 설정되어 있는지 확인하고 싶을 것입니다. 세션을 지우면서 더 이상 존재하지 않을 것입니다 사용자가 쿠키를 통해 다시 유효성을 검사 할 때

ASP.NET 해야 그 인증 세션 시간 초과 및 응용 프로그램이 다시 시작에 걸쳐 수있는 방법으로, 쿠키를-검증 재 - 응용 프로그램이 피들러의 요청이를인지 알 수있는 방법이 없습니다 모든 세션 데이터를 제거 할 수 세션이 방금 죽거나, 마지막으로 다시 시작하기 전에 시간이 초과되었거나 만들어진 세션입니다. 의견에


또한 응답 : 바르게 지적

Blowdart으로, 세션 및 인증 쿠키는 관련이없는, 서버는 어디 발행 한 모든 인증 쿠키의 목록을 유지하지 않습니다 . 따라서 폼 인증 시간 초과 내에서 발급 한 쿠키와 이후에 제거 된 시간 초과 내에 발급 된 쿠키간에 서버간에 차이가 없습니다. 사용자가 해당 쿠키 값을 다시 작성하면 유효한 쿠키입니다. 이 지원 제는 쿠키/티켓 조합에 대한 자세한 정보]이 있습니다

Understanding the Forms Authentication Ticket and Cookie

폼 인증 쿠키는 폼 인증 티켓의 컨테이너에 불과하다. 티켓은 각 요청과 함께 폼 인증 쿠키의 값으로 전달되며 서버의 폼 인증에서 인증 된 사용자를 식별하는 데 사용됩니다. 쿠키에 인증 티켓이 사용자에 대한 다른 정보와 함께 서버에 의해 허용되지 않은 경우 나, 앞서 말했듯

, 다음 영구 쿠키는 사용자 빈도에 상관없이 작동하지, 그리고 것 "Remember me next time"을 선택하면 서버가이를 기억하지 못하기 때문에 인증 상태뿐 아니라 세션의 일부 값 (피들러 요청에 존재하지 않는 값)에 의존하지 않는 것이 좋습니다 서버가 그 정보를 파괴하기 때문에 로그 아웃 후).

+0

감사합니다, 선생님, 실제로 나는 로그 아웃 후 피들러 (fiddler)의 도움으로 인증 쿠키와 세션이 서버에서 재확인됩니다. 즉, 해커가 도구를 사용하여 가비지 데이터를 삽입하여 응용 프로그램을 손상시킬 수 있음을 의미합니다. 로그 아웃 후에 서버가 바이올린 요청을 재확인하지 않도록 로그 아웃 코드를 수정할 수 있습니까? 내 로그 아웃 양식에 다음 코드를 사용 중입니다. Session.Abandon(); HttpContext.Current.Session.Clear(); httpcontext.current.response.cookies.remove ("AUTHCOOKIE") FormsAuthentication.SignOut(); –

+1

수 없습니다. 쿠키가 저장되고 다시 전송되면 ASP.NET은 이전에 쿠키가 삭제되었음을 어떻게 알 수 있습니까?인증 쿠키는 세션에 연결되어 있지 않습니다 (심지어 새로 생성 된 세션에 세션 상태로 저장된 내용은 없지만 세션 쿠키도 저장되고 전송됩니다). 이것은 실제로 취약점이 아닙니다. – blowdart

+0

@ 블로우 다트 (Blowdart) - 이것이 어떻게 작동해야하는지 모두 동의 해주세요. 제가 편집 할 때 말했듯이, 인증 쿠키가 앱 재시작 외에도 계속 유지되는 방법은 무엇입니까? 따라서 이것이 우려되는 경우 세션 기반 값도 확인해야하며 이는 피 들러 요청에 의해 다시 생성되지 않습니다. –