2010-02-05 5 views
1

저는 중소 기업을 위해 ASP.NET 웹 사이트를 개발하고 있습니다. 사이트는 사이트 소유자가 사이트 콘텐츠를 관리 할 수있는 암호로 보호 된 영역이 필요합니다. 나머지 지역에서는 사이트가 완전히 읽기 전용입니다.불쌍한 사람의 인증

은 내가 설계 다음과 같은 방식을 구현했습니다 :

  • 사용자는 일부 보호 페이지에 액세스하려고합니다.
  • 모든 보호 된 페이지는 사용자가 보호 된 페이지에 있다는 것을 알 수 있도록 UI를 변경하고 보안 쿠키를 확인하는 "AdminIface"마스터 페이지를 상속합니다. 쿠키가 없거나 잘못된 쿠키 인 경우 : auth.aspx로 리디렉션하십시오.
  • Auth.aspx는 RNGCryptoServiceProvider를 사용하여 큰 난수를 생성 한 다음이를 클라이언트 + 암호 형식으로 보냅니다.
  • 사용자가 암호를 입력합니다.
  • 클라이언트 쪽 JavaScript는 임의 시드 + 암호를 결합하고 결과 문자열의 MD5를 계산하여 MD5를 서버에 게시합니다.
  • 서버는 랜덤 시드를 세션 별 값 보류와 비교합니다. OK 시드가 무작위 시드 + 암호를 결합하고 MD5를 계산하고 MD5를 비교합니다.
  • 체크섬이 일치하면 서버가 보안 쿠키로 사용할 하나 이상의 큰 난수를 생성합니다.
  • 서버는 세션 쿠키에 보안 쿠키를 저장하고 쿠키가 현재 승인 된 것으로 간주되는 클라이언트에게 보냅니다.

정확한 암호는 문자열 상수로 auth.aspx 소스에 저장됩니다.

이 체계는 괜찮습니까?

P. 나는 AD + Kerberos가 훨씬 낫다는 것을 알고 있지만, godaddy의 공유 호스팅에서 한 번 더 응용 프로그램을 만들 수있는 권한이 없습니다.

+0

쿠키를 사용 중지하면 어떻게됩니까? – Paddy

+0

추신 : 더 나은 웹 호스트를 고려하십시오. GoDaddy는 값이 쌉니다.하지만 정말 끔찍합니다. 내가 그 (것)들을 사용하는 일을 생각하면 두려워한다. –

+0

Paddy, 오직 1 명의 사용자 만 자료를 편집 할 수 있습니다. 그는 내 고객이고, 나는 그를 포괄적 인 사용자 가이드로 안내 할 것입니다. 나는 그를 위해 IE8을 사용하도록 강요 할 수도 + 필요한 경우 신뢰할 수있는 사이트에 사이트를 추가 할 수 있습니다. – Soonts

답변

2

괜찮습니다. 표준 HMAC 물건. 그러나 약점 :

  1. 응용 프로그램 : 의존 자바 스크립트와 세션
  2. 보안에 : 당신의 요구 사항에 따라 새로운 코드베이스

을 사용하면 확인 할 수 있습니다. 나는이 문제들을 극복하고 훨씬 더 많이 사용하는 폼 인증을 강력하게 제안했다.

+0

1. 인증 된 사용자의 환경이 제어됩니다. 2. 가능하면 .NET Framework 클래스의 RNG, MD5 및 Base64, webtoolkit.info의 MD5와 같은 기존 코드를 사용합니다. 나는 ~ 50 LoC만을 썼다. – Soonts

1

음, 왜 http://en.wikipedia.org/wiki/Basic_access_authentication (https가없는 경우)이 필요합니까?

- 위협의 실제 시나리오는 무엇입니까?

귀하의 방법은 약간 손으로 롤백 된 것 같습니다. 일반적인 규칙은 자신 만의 보안 시스템을 고안하기보다는 기존의 보안 시스템을 사용하는 것입니다. 정말로 안전한 새로운 인증 메커니즘을 발명하는 것은 매우 어려운 문제로 알려져 있습니다.

+0

AFAIK Windows의 경우 기본 인증을 사용하려면 AD (또는 NTLM) 사용자 계정이 있어야합니까? 내 환경이 공유 호스팅이므로 사용자를 만들거나 비밀번호를 변경할 수 없습니다. – Soonts

0

TLS/SSL의 문제점은 무엇입니까? 여기에는 여러 가지 이점이 있지만 여기에는 사이트 -> 사용자 인증의 일부 스레드가 있습니다.

4

사용자 인증을 web.config에 어렵게 코딩 할 것입니다. 즉, 멤버십 컨트롤을 계속 사용할 수 있습니다. 정말 좋은 예가 here입니다. 데이터베이스가 필요 없으며 멤버 자격 공급자도 필요하지 않습니다. 사용자가 한 명 (또는 소수의 사용자)이라면 꽤 좋은 옵션입니다.

web.config에있는 인증 세부 정보가 걱정된다면 web.config 파일 encrypt specific sections을 사용할 수 있습니다.

이것은 구현 한 것보다 훨씬 간단한 해결책으로 보입니다.

+1

+1, 단지 하드 코드입니다 –

+0

Junto, 사이트의 1 섹션 만 인증을 받아야하며 1 개의 web.config 만 있습니다. 다음 토론을 읽은 후에이 작업을 시작했습니다. http://forums.asp.net/t/1033181.aspx – Soonts

+1

1 개의 기본 web.config는 계속 작동 할 수 있습니다. 사이트의 특정 영역을 열어두고 다른 영역은 보안 상태로 둘 수 있습니다. 위치 설정을 사용하여 잠겨 야 할 디렉토리 또는 파일을 말하면됩니다. http://msdn.microsoft.com/en-us/library/ms178692.aspx – Junto

0

이미 언급했듯이 SSL 인증서로 양식 인증을 사용하지 않는 것이 좋습니다 (특히 한 사용자 만 해당). 테스트를 거쳤 음을 알고 있습니다 ... 당신이 ' 잠재적으로 놓친 것이다.

1

많은 지능있는 사람들 (즉, WEP를 만든 소프트웨어 엔지니어)은 자체 보안 인증 메커니즘을 만들려고했지만 실패했습니다. 자신의 "사용자 지정"보안 인증을 망칠 수있는 가능성은 무한합니다 (불쾌감은 없지만 보안 전문가에게조차 처리하는 것은 매우 어려운 문제입니다).

입증 된을 SSL 인증서 기반 인증 방법과 같은 방식으로 사용하는 것이 가장 좋습니다.

관련 문제