비밀번호를 제외한다면, 연결 문자열을 소스코드에 적는 것이 어떤 보안 문제를 야기할까요?

[수정]
DB 비밀번호는 앱 실행 시 사용자가 입력하게 만들고, 나머지 연결에 관한 모든 정보를 노출한 채로 프로덕션 배포를 할 경우, 보안 문제가 있을까요?

노출은 appsettings.json 뿐만 아니라, 소스 코드 등 어디든 평문으로 적은 것을 의미합니다.

아래는 소스코드에 노출한 것을 예로 들었습니다.

Program.cs

Console.Write("Enter database password:");

var dbpw = Console.ReadLine();

string csWithoutPW = "Server=(localdb)\\mssqllocaldb;Database=Movie;User Id=webuiblazor;MultipleActiveResultSets=true";

var conStrBuilder = new SqlConnectionStringBuilder();
conStrBuilder.ConnectionString = csWithoutPW;
conStrBuilder.Password = dbpw;

try
{
    using SqlConnection con = new SqlConnection(conStrBuilder.ConnectionString);
    con.Open();
}
catch
{
    return;
}

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(conStrBuilder.ConnectionString));

// ...

보안쪽 문제는 특별히 없을것 같네요 오히려 서버가 털려서
Config 파일이 까지다면 그대로 공개되니까요
DLL 이야 역어셈 하지 않는한 볼수 없기도 하고요 보안은 더 좋을수도 있지만
관리하는데 힘드시겠죠
정석이나 권장은 따로 Json 파일을 빼서 암호화해서 넣어두거나
azure key value 서비스를 사용하는것아라고 들었습니다.

비밀번호를 일일이 기억하거나 제 3의 장소에서 기록해둬야 함을 말씀하시는 것인가요?

DB Connection 정보가 수정되면 dll을 재배포해야 하고
배포 사이트가 늘어나다보면 이게 어디 db에 연결됐는지 헷갈리기도 하고
인수인계 할때도 일반적이지 않으니(보통 appsetting.json에 담겨있으니)
알려줘야 하고 뭐 여러가지 있죠

보안이 중요하면 3-tier로 가야죠

@BigSquare 비밀번호를 제외한 DB정보는 노출될 수 있겠죠.

설령 비번이 제외되었더라도 DB 정보를 노출시키는 것은 좋지 않은 것 같습니다.

여담으로, 아직도 많은 키오스크와 같은 외부에 노출된 애플리케이션 클라이언트들이 2티어 구조를 사용하고 있어 보안이 심각하게 취약합니다… (소름 돋죠…)

언제든 한번 크게 터질거에여…

직접적인 보안 문제는 없겠지만, 간접적인 문제는 생길 수 있죠.
즉, "SQL Server를 사용하면 이런 취약점이 있으니까 이걸 이용해서 해킹해야지~"라는 문제가 생길 수 있겠죠. 예를들면, 잘못된 계정으로 무한 로그인 시도 같은것? 그 외에 ip를 노출하면 DDOS 공격을 직접적으로 받을 수 있겠죠.

예시로 보여주신 소스는 로컬DB의 데이터로

로컬에서 관리되고 사용 되는 자원 같습니다.

저는 로컬 데이터라면 말씀 하신 것 처럼 사용자에게 패스워드를 받아서 연결 하여 사용해도 괜찮고

또한 그렇게 하는 것이 맞다고 생각합니다.

그러므로 “어떤 보안 문제를 야기 할까요?” 질문 주신 것에 대해서는 큰 해당 사항은 없습니다.



설령 MDB 자체 파일이 외부로 노출 되어서 해당 DBMS의 취약점으로 인해 내용이 탈취 당해도

민감한 내용이 암호화만 잘 되어 있다면 상관 없습니다.

단 여기서 전제 조건은 암.복호화에 사용 되는 특정 Key가 프로그램 코드에 노출 되어 있지 않고,

사용자에게 패스워드를 입력받아 인증 받은 사용자에게만 서버측에서 Key 정보를 받아 암.복호화 되어 있다던지 등으로 디컴파일을 해도 알 수 없을 경우 입니다.