소스코드에 데이터베이스 비밀번호가 일반 텍스트로 저장되지 않도록 하려면 어떻게 해야 합니까?

StackOverflow https://stackoverflow.com/questions/42833

문제

제가 개발 중인 웹 애플리케이션에서는 현재 데이터베이스에 연결할 때 순진한 솔루션을 사용합니다.

Connection c = DriverManager.getConnection("url", "username", "password");

이것은 매우 안전하지 않습니다.공격자가 소스코드에 접근할 수 있게 되면 데이터베이스 자체에도 접근할 수 있게 됩니다.소스코드에 일반 텍스트로 데이터베이스 비밀번호를 저장하지 않고 웹 애플리케이션을 데이터베이스에 어떻게 연결할 수 있나요?

도움이 되었습니까?

해결책

Web.config 또는 App.config 파일에 연결 문자열을 저장하고 해당 문자열이 포함된 섹션을 암호화할 수 있습니다.다음은 연결 문자열을 암호화하기 위해 이전 프로젝트에서 사용한 매우 유용한 기사입니다.

http://www.ondotnet.com/pub/a/dotnet/2005/02/15/encryptingconnstring.html

다른 팁

.NET에서는 연결 문자열을 별도의 구성 파일에 저장하는 것이 규칙입니다.

거기에, 구성 파일을 암호화할 수 있습니다..

Microsoft SQL Server를 사용하는 경우 도메인 계정을 사용하여 데이터베이스에 대한 신뢰할 수 있는 연결을 사용하는 응용 프로그램을 실행하면 이 모든 것이 관련이 없습니다.이 경우 연결 문자열에는 사용자 이름과 비밀번호가 포함되지 않습니다.

.NET 프로그래머에게 다음 기술을 추천할 수 있습니다.

  • 구성 파일의 비밀번호\연결 문자열 암호화
  • 클라이언트와 서버 간에 신뢰할 수 있는 연결을 설정합니다(예:Windows 인증 등을 사용하십시오)

다음은 CodeProject의 유용한 기사입니다.

요점을 놓치지 않는 한 연결은 연결 풀을 통해 서버에서 관리되어야 하므로 연결 자격 증명은 앱이 아닌 서버에 의해 보관됩니다.

이를 더 발전시키면 일반적으로 프런트엔드 웹 애플리케이션(DMZ에 있음)이 웹 서비스(도메인에 있음)를 통해서만 DB와 통신하므로 완전한 분리와 향상된 DB 보안을 제공하는 규칙을 구축합니다.

또한 본질적으로 필요한 것 이상으로 db 계정에 권한을 부여하지 마십시오.

다른 접근 방식은 저장 프로시저를 통해 모든 작업을 수행하고 애플리케이션 사용자에게 이러한 프로시저에만 액세스 권한을 부여하는 것입니다.

MS SQL을 사용한다고 가정하면 소스 코드 어디에도 사용자 이름/패스가 필요하지 않은 Windows 인증을 활용할 수 있습니다.그렇지 않으면 app.config + 암호화를 권장하는 다른 포스터에 동의해야 합니다.

  1. O/S 사용자 생성
  2. 해당 사용자의 O/S 환경 변수에 비밀번호를 입력하세요.
  3. 해당 사용자로 프로그램을 실행하십시오.

장점:

  1. 루트 또는 해당 사용자만 해당 사용자의 O/S 환경 변수를 볼 수 있습니다.
  2. 재부팅 후에도 살아남음
  3. 실수로 소스 제어에 비밀번호를 체크인하는 일은 절대 없습니다.
  4. 파일 권한을 망치는 것에 대해 걱정할 필요가 없습니다
  5. 암호화 키를 어디에 저장하는지 걱정할 필요가 없습니다.
  6. x-플랫폼에서 작동
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top