강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

김상형님의 프로필 이미지
김상형

작성한 질문수

강의 하나로 끝내는 백엔드 모든 지식!

해커로부터 내 서비스 지키기! 웹 보안 기초 (SQL 인젝션, XSS, CSRF)

백엔드 신입으로써 알아야할 보안에 대한 기본 수준이 궁금합니다

해결된 질문

작성

·

36

·

수정됨

0

검색을 해보니 강의 내용 중 나오는

  • sql인젝션

  • xss, HttpOnly

  • csrf, SameSite

  • https

이 부분들은 보통 기본적으로 많이 선택해서 꼭 알아야 하고 연습해야 하는 것으로 생각됩니다
그 외에도 알려주신 것들에 대해 자세히 알아야 할까요? 아니면 이런 방법들이 있구나 하고 굳이 직접 사용해볼 필요는 없는 걸까요

답변 2

0

해여님의 프로필 이미지
해여
지식공유자

안녕하세요, 강사해여입니다.

먼저 답변이 늦어진 점에 대해 사과의 말씀올립니다!.

제 메일이 질문 등록관련 메일을 잘못 분류해버려서 확인이 늦었네요..!

오, 질문자님께서 찾아보신 내용이 백엔드 신입이 알아야 할 보안의 '국룰' 그 자체입니다! 🎯

결론부터 말씀드리면, 네, 그 부분들은 '이런 게 있구나' 수준이 아니라, '직접' 연습하고 '왜' 쓰는지 설명할 수 있을 정도로 아셔야 합니다.


 

먼저 말씀주신 4가지는 보안기법은 백엔드 개발자가 코드를 짜면서 마주치고 고려해야 하는, 밥 먹는 것과 같은 기본 중의 기본입니다.

  1. SQL 인젝션 (SQL Injection)

    • 왜? 백엔드는 DB와 직접 대화합니다. 유저가 입력한 값을 검증 없이 SQL 쿼리에 그대로 붙여넣으면(string concatenation), DB가 통째로 털리거나 삭제될 수 있습니다.

    • 어떻게? "이런 게 있구나"가 아니라, Prepared Statement (Parameter-based query) 써야 하는지, ORM(JPA, TypeORM 등)이 이걸 어떻게 막아주는지 원리를 아셔야 해요.

  2. XSS & HttpOnly

    • 왜? 유저가 입력한 스크립트가 다른 유저 화면에서 실행되면, 쿠키(로그인 정보)를 탈취당할 수 있습니다.

    • 어떻게? 백엔드 개발자는 두 가지를 해야 합니다.

      1. 데이터를 DB에 저장할 때 (Input) 또는 화면에 뿌려줄 때 (Output) 이스케이프(escaping) 처리를 해야 합니다. (e.g., <script>&lt;script&gt;로)

      2. 쿠키를 발급할 때 HttpOnly 플래그를 켜서, 자바스크립트가 쿠키에 접근하는 것을 원천 차단해야 합니다. (이건 순수 백엔드 영역!)

  3. CSRF & SameSite

    • 왜? 로그인한 유저가 자기도 모르게 악성 링크를 클릭해서 "비밀번호 변경"이나 "글 삭제" 같은 요청을 서버에 보내버릴 수 있습니다.

    • 어떻게? 예전엔 CSRF 토큰을 많이 썼지만, 요즘엔 쿠키에 SameSite=Strict 또는 SameSite=Lax 설정을 걸어서 브라우저 레벨에서 대부분 방어합니다. 이 옵션이 무엇을 의미하는지 아는 것이 중요합니다.

  4. HTTPS (SSL/TLS)

    • 왜? 유저가 아이디/비번을 입력할 때, 그 데이터가 인터넷 망을 통해 서버로 날아가는 모든 과정을 암호화합니다. 이게 없으면 중간에서 누구나 훔쳐볼 수 있어요.

    • 어떻게? 신입에게 직접 SSL 인증서를 발급하고 서버에 세팅하라고 시키진 않을 수 있지만 (주로 인프라/데브옵스 담당), 최소한 HTTPS가 왜 필요하고, HTTP와 뭐가 다른지 설명할 수는 있어야 합니다.


그러면 저 4개만 알면 될까요? 답은 아니요입니다! 저 4가지가 '공격 기법'에 대한 방어라면, 백엔드 개발자가 '기본적으로 구현해야 할' 보안 기능들이 몇 가지 더 있습니다. '기본 세트'라고 보시면 돼요.

  1. 🔒 비밀번호 암호화 (Hashing)

    • 절대! NEVER! 유저 비밀번호를 쌩 텍스트(Plain Text)로 DB에 저장하면 안 됩니다.

    • 최소한 bcrypt 같은 단방향 해시 함수를 사용해서 '해시값'으로 변환해 저장해야 합니다. (MD5, SHA-1 같은 옛날 방식은 쓰면 안 돼요!)

  2. 🔑 인증(Authentication)과 인가(Authorization)

    • 인증 (AuthN): 이 사람이 '누구'인지 확인하는 것 (e.g., 로그인, JWT 발급)

    • 인가 (AuthZ): 이 사람이 '권한'이 있는지 확인하는 것 (e.g., '관리자'만 이 API를 쓸 수 있는가?)

    • 이건 그냥 보안이 아니라, 백엔드 기능의 핵심입니다.

  3. 🛡 입력값 검증 (Input Validation)

    • "유저가 보내는 모든 데이터는 일단 의심하고 본다."가 기본 마인드셋입니다.

    • 이메일 필드에 진짜 이메일 형식이 왔는지, 나이 필드에 숫자가 왔는지, 글 내용의 길이가 너무 길진 않은지 등등... 모든 API의 입구에서 검증해야 합니다.

  4. 🤫 민감한 정보 노출 금지 (Error Handling)

    • 에러가 났을 때, 유저에게 SQL database connection error... 같은 시스템 내부 오류 메시지나 스택 트레이스(stack trace)를 그대로 보여주면 안 됩니다.

    • 해커에게 시스템 내부 구조에 대한 힌트를 주는 꼴입니다. 에러는 '로깅'만 하고, 유저에겐 "서버 오류가 발생했습니다." 같은 일반적인 메시지만 보여줘야 합니다.


사실 신입 혹은 한명의 개발자에게 이 모든 것을 '마스터'해서 완벽하게 방어하라고 기대하진 않습니다. 😅

다만, "왜 쿼리를 이렇게 짜셨어요?" 또는 "쿠키 설정은 왜 이렇게 하셨어요?"라고 물었을 때,

"SQL 인젝션을 방어하기 위해 Prepared Statement를 사용했습니다.""XSS 공격 시 쿠키 탈취를 막기 위해 HttpOnly 플래그를 켰습니다."

라고 '보안' 관점에서 그 이유를 설명할 수 있는 것. 그게 신입에게 기대하는 '기본 수준'입니다.


지금처럼 궁금해하고 직접 찾아보는 태도가 제일 중요합니다! 화이팅입니다! 💪

0

안녕하세요, 인프런 AI 인턴입니다. 김상형님.

백엔드 개발을 시작하시면서 보안에 대한 기본적인 주제를 이해하고 연습하려고 하시는 점, 아주 훌륭한 접근입니다. 보안은 백엔드 개발에서 매우 중요한 요소이기 때문에 기본적인 지식과 실습은 필수적입니다.

김상형님이 언급하신 주제들은 백엔드 개발에서 자주 언급되는 보안 이슈들입니다:

  • SQL 인젝션: 데이터베이스 쿼리에 악의적으로 코드를 주입하는 공격으로, 이를 방지하기 위해서는 ORM을 사용하거나, 준비된 문장을 사용하는 등의 방법이 필요합니다.

  • XSS (Cross-Site Scripting): 자바스크립트 코드를 악의적으로 삽입하는 공격으로, HttpOnly 쿠키 설정이나 입력 값 검증, HTML 엔티티 이스케이핑 등을 통해 방어할 수 있습니다.

  • CSRF (Cross-Site Request Forgery): 사용자가 인지하지 못한 사이에 수행된 요청을 만드는 공격으로, SameSite 쿠키 설정 등을 통해 방지할 수 있습니다.

  • HTTPS: 데이터 전송을 암호화하여 중간에서의 데이터 탈취를 방지합니다.

이외에도 보안의 기본 원리인 ‘최소 권한 원칙’을 준수하거나, ‘입력 검증’을 철저히 하는 것 등은 백엔드 개발자라면 반드시 이해하고 있어야 합니다.

백엔드 보안을 잘 이해하려면 단순히 개념만 아는 것보다 직접 간단한 프로젝트를 통해 연습해 보는 것이 매우 유익합니다. 예를 들어, SQL 인젝션을 방지하는 코드를 작성해 본다거나, 쿠키 설정을 통해 CSRF를 방지하는 등 직접 구현해 보는 것이 큰 도움이 됩니다.

더 많은 정보와 구체적인 실습은 강의를 통한 보안 이해에서 자세히 알아보실 수 있습니다. 보안은 꾸준히 학습하고 주의해야 할 부분이니, 관심을 가지고 지속적으로 학습하시길 추천드립니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김상형님의 프로필 이미지
김상형

작성한 질문수

질문하기