[수정]
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개의 좋아요
파란매
4월 17, 2023, 5:30오전
#2
보안쪽 문제는 특별히 없을것 같네요 오히려 서버가 털려서
Config 파일이 까지다면 그대로 공개되니까요
DLL 이야 역어셈 하지 않는한 볼수 없기도 하고요 보안은 더 좋을수도 있지만
관리하는데 힘드시겠죠
정석이나 권장은 따로 Json 파일을 빼서 암호화해서 넣어두거나
azure key value 서비스를 사용하는것아라고 들었습니다.
2개의 좋아요
파란매:
관리하는데 힘드시겠죠
비밀번호를 일일이 기억하거나 제 3의 장소에서 기록해둬야 함을 말씀하시는 것인가요?
1개의 좋아요
파란매
4월 17, 2023, 5:40오전
#4
DB Connection 정보가 수정되면 dll을 재배포해야 하고
배포 사이트가 늘어나다보면 이게 어디 db에 연결됐는지 헷갈리기도 하고
인수인계 할때도 일반적이지 않으니(보통 appsetting.json에 담겨있으니)
알려줘야 하고 뭐 여러가지 있죠
2개의 좋아요
@BigSquare 비밀번호를 제외한 DB정보는 노출될 수 있겠죠.
설령 비번이 제외되었더라도 DB 정보를 노출시키는 것은 좋지 않은 것 같습니다.
여담으로, 아직도 많은 키오스크와 같은 외부에 노출된 애플리케이션 클라이언트들이 2티어 구조를 사용하고 있어 보안이 심각하게 취약합니다… (소름 돋죠…)
언제든 한번 크게 터질거에여…
2개의 좋아요
자마린
4월 17, 2023, 11:36오후
#7
직접적인 보안 문제는 없겠지만, 간접적인 문제는 생길 수 있죠.
즉, "SQL Server를 사용하면 이런 취약점이 있으니까 이걸 이용해서 해킹해야지~"라는 문제가 생길 수 있겠죠. 예를들면, 잘못된 계정으로 무한 로그인 시도 같은것? 그 외에 ip를 노출하면 DDOS 공격을 직접적으로 받을 수 있겠죠.
2개의 좋아요
예시로 보여주신 소스는 로컬DB의 데이터 로
로컬에서 관리되고 사용 되는 자원 같습니다.
저는 로컬 데이터라면 말씀 하신 것 처럼 사용자에게 패스워드를 받아서 연결 하여 사용해도 괜찮고
또한 그렇게 하는 것이 맞다고 생각합니다.
그러므로 “어떤 보안 문제를 야기 할까요?” 질문 주신 것에 대해서는 큰 해당 사항은 없습니다.
설령 MDB 자체 파일이 외부로 노출 되어서 해당 DBMS의 취약점으로 인해 내용이 탈취 당해도
민감한 내용이 암호화만 잘 되어 있다면 상관 없습니다.
단 여기서 전제 조건은 암.복호화에 사용 되는 특정 Key가 프로그램 코드에 노출 되어 있지 않고,
사용자에게 패스워드를 입력받아 인증 받은 사용자에게만 서버측에서 Key 정보를 받아 암.복호화 되어 있다던지 등으로 디컴파일을 해도 알 수 없을 경우 입니다.
3개의 좋아요