2009-06-01 2 views
1

.NET 웹 응용 프로그램을 통해 액세스하려는 데이터베이스가 있습니다. web.config에서 연결 문자열을 쉽게 암호화 할 수 있지만 상자에 액세스 할 수있는 개발자는 몇 줄의 코드로 암호를 해독 할 수 있습니다. 따라서 상자에 액세스 할 수 있으므로 컴퓨터에 저장된 암호화 키에 액세스 할 수 있습니다. config.다른 개발자가 해독 할 수 없도록 연결 문자열을 암호화하지만 앱에 계속 액세스 할 수 있습니다.

사용자 계정 액세스를 거부하여 사람들을 데이터베이스에서 잠글 수는 있지만 웹 응용 프로그램에 왕국의 속담을 알리는 데 도움이되지 않습니다. 잘 아는 개발자가 사용할 수있는 웹 응용 프로그램에서 사용하는 SQL 계정없이 웹 응용 프로그램이 데이터베이스에 액세스 할 수있게하는 좋은 방법은 누구나 알고 있습니까?

답변

5

이것은 닭고기 및 계란 문제입니다. 응용 프로그램이 비밀 키 (연결 문자열을 암호화하는 키)에 액세스 할 수있는 경우 응용 프로그램과 동일한 권한으로 실행중인 사람도 누구나 가질 수 있습니다.

이 작업을 관리하는 가장 좋은 방법은 SQL Server 연결 문자열에서 login/pwd를 사용하지 않고 SSPI (통합 보안)를 사용하지 않는 것이 좋습니다. 이렇게하면 응용 프로그램은 Windows 자격 증명 (응용 프로그램을 실행하는 계정)을 사용하여 유선 상에 자격 증명을 보내지 않고 데이터베이스에 인증합니다 (일반 인증은 로그인 할 때마다 login/pwd가 응용 프로그램과 db간에 전달됨을 의미합니다) 연결), 암호를 저장할 필요가 없습니다. 실행중인 계정의 암호를 쉽게 추측 할 수 없도록해야합니다. 그 다음에는 계정의 보안 수준만큼 안전합니다 (집에 관해서는 아무 것도 없지만 프로세스간에 자격 증명을 전달하는 것보다 훨씬 낫습니다).

같은 자격 증명 (응용 프로그램의 모든 코드)으로 실행되는 모든 항목은 서비스 계정의 권한으로 실행됩니다.

또한 응용 프로그램 계정이 DB에서 수행 할 수있는 작업을 최소한 (필요없는 관리/dbo)로 제한해야합니다.

+2

을 그 막 나는 사소한 데이터베이스 상호 작용을 할 sa 계정을 사용하고있다 가입 한 모든 프로젝트. 더 나쁜 것은 일반적으로 인터페이스에 지나치게 엔지니어링 된 로그인 프로세스가 있습니다. – overslacked

3

프로그램에서 데이터를 암호화하는 방법을 알고 키가있는 위치를 알고 있으면 데이터를 해독 할 수 있습니다. ("I"== 모든 개발자)

키를 보호하면 (유닉스 권한, Windows ACL) 대부분의 프로그램이 중지 될 수 있지만 항상 프로그램에 라인을 추가하거나 키를 덤프 할 수 있습니다 (또는 암호화되지 않은 데이터)를 비밀 장소에 보냅니다. (또는 암호화 명령을 실제로 간단한 XOR 또는 이와 동등한 유사한 것으로 변경하십시오.)

결론적으로 소스 코드를 제어 할 수 있다면 프로그램을 아무 것도 만들 수 없습니다.

0

개발자가이 질문에서 제기하는 의미에서 심각한 보안 위험이 있다고 생각하는 경우, 즉시 화재가 발생하고 궁극적으로 신뢰할 수있는 개발자를 고용해야합니다.

DB에 대한 키로 신뢰할 수없는 개발자도 코드 기반으로 신뢰해서는 안됩니다.

사이드 노트 DEL *에서 그들을 지키는 이유. * 파일 시스템에 있습니까?

+1

HIPPA는 누가 암호를 알아내는 지 엄격하게 제한하려는 이유 중 하나입니다. 때로는 신뢰 문제가 아니라 법적/책임 문제입니다. – overslacked

+0

어, HIPAA, 오히려. – overslacked

+0

@overslacked 이는 생산 시스템과 개발 시스템간에 차이가 있음을 암시합니다.이 경우 생산 시스템과 개발 시스템은 쉽게 해결됩니다. 개발자가 프로덕션 환경에 액세스 할 수 없도록하십시오. – Joseph

1

개발자를 신뢰할 수 없다면 완전히 다른 문제가 발생할 수도 있지만 aspnet_setreg을 확인하여 도움이되는지 확인하는 것이 좋습니다.

아니면 잘 모르는 개발자를 고용 할 수도 있습니다. :)

2

잘못된 방법으로보고있을 수 있습니다.

보안이 높은 상황에서 개발자는 다른 모든 사람과 마찬가지로 프로덕션 데이터베이스에 액세스 할 수 없습니다. 당신은 방화벽이나 뭐든간에 이것을 할 수 있습니다.

언급 한 Yann Schwartz와 같이 SSPI를 사용하는 경우 프로덕션 웹 서버 만 데이터베이스에 연결할 수 있습니다. 가능하지 않다면, sysadmin은 배치시 web.config 파일에 (암호화 된) 암호를 수동으로 넣어야합니다.

개발/품질 관리에 대해 서로 다른 인증을 사용하는 별도의 데이터베이스가 있어야한다는 것은 자명합니다 (또는 최소한해야합니다).

1

여기에 주어진 대답은 질문에 대답하지 않습니다.

설정 파일의 값을 암호화하는 데는 여러 가지 이유가 있습니다. 상자가 손상된 경우 데이터베이스 서버 상자가 손상되지 않도록하는 등의 작업이 필요합니다.

해당 데이터베이스가 oracle 또는 sybase와 같은 SQL Server 이외의 다른 데이터베이스 인 경우 위의 해결 방법은 작동하지 않습니다.

이 문제를 해결하기 Encrypting Web.Config Values in ASP.NET 2.0에 많은 링크가 있습니다 : 그것은 나를 무섭게

관련 문제