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

[수정]
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));

// ...
1개의 좋아요

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

2개의 좋아요

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

1개의 좋아요

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

2개의 좋아요

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

3개의 좋아요

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

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

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

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

2개의 좋아요

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

2개의 좋아요

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

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

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

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

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



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

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

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

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

3개의 좋아요