[JAVA] - 웹 취약점 (Secure Coding)

Joy H·2025년 3월 6일
post-thumbnail

보안 취약에 대비하기 위해 서버단에서 처리 필요

Cross-Site Scripting(XSS)

: 검증되지 않은 데이터를 웹 브라우저에 보내면 브라우저에서 악성 코드 실행가능해짐
-> XSS 취약점은 HTTP헤더의 응답에 확인되지 않은 데이터가 포함된 코드인 자바스크립트 때문에 발생

  • 개인정보 탈취: 공격자가 악성 스크립트를 삽입하여 다른 사용자의 세션 쿠키나 개인정보를 탈취할 수 있음
  • 피싱 공격: 정상적인 페이지에 가짜 로그인 폼을 삽입하여 사용자의 인증 정보를 탈취할 수 있음
  • 악성 코드 배포: 취약점을 통해 사용자 브라우저에 악성 코드를 주입하여 추가적인 공격을 수행할 수 있음
  • 권한 상승: 관리자 계정의 쿠키를 탈취하여 관리자 권한을 획득할 수 있음

-> ex1) 게시글 제목에 스크립트 삽입시 실행됨

해결방안
1) 특수문자 인코딩
2) XSS 필터링 소스 추가

3) CSP강화

response.setHeader("Content-Security-Policy", "default-src 'self' *.google.com;");

4) HttpOnly 플래그 설정

response.setHeader("Set-Cookie", "name=value; Secure; HttpOnly;");

5) 보안헤더 적용

response.addHeader("X-XSS-Protection", "1; mode=block"); // XSS 필터링 사용 + 공격 탐지시 랜더링 중단
response.addHeader("X-Content-Type-Options", "nosniff"); //  스크립트로 첨부파일 실행 막음

코드 비교

: 문자열을 '==' 이 아닌 equals() 메서드로 비교해야 함
why? '==' 연산자는 두 개체의 값이 아닌 참조를 비교하기 때문

헤더 조작 (Header Manipulation)

: HTTP 응답 헤더에 확인되지 않은 데이터를 포함시 교차사용자변조, XSS, 쿠키 조작 등 공격 유발

해결방안
1) 불가 문자 제거

약한 암호화방식

: SHA-1 같은 경우 데이터 무결성 확인시 사용되는 암호화 이지만 약함

해결방안
1) SHA-256, SHA-512 사용

불충분한 인가

: 접근이 불가능한 페이지 및 권한이 없는 페이지 접근 가능
-> ex1) 로그인시 확인 가능한 페이지를 url 경로로 접근 (url 내 get방식으로 menupos값이 노출되거나할시 유추해서 강제로 넣을 수도 있음)

해결방안
1) 로그인시 담기는 세션 이용해서 분기처리

-> ex2) 권한이 있어야 확인 가능한 페이지를 url 경로로 접근 ( )

해결방안
1) 권한이 저장되는 쿼리에서 값을 가져와서 해당 권한자로 분기처리

-> ex3) 비밀글의 경우, 잘못된 비밀번호 입력 후 응답값을 'Y'로 강제변환시 비밀글 게시 가능

해결방안
1) 클라이언트 레벨(Javascript 등)을 이용하여 검증하는 것이 아닌 서
버 사이드 레벨에서 검증하여 인증 불일치 시 즉시 페이지 리다이렉트

[클라이언트측 저장]

[서버단에서 암호화 및 확인]

불충분한 인증

: 기존 데이터 변조, 게시글 및 사용자 정보 강제 변경

-> ex1) 파일 다운로드 경로 조작을 통해 주요 정보 탈취 가능 (첨부파일 클릭하여 다운로드시 전달되는 응답 패킷에서 인코딩방식을 강제 변경 후 파일명 파라미터에 경로 이동 문자열 넣어서 서버 내 중요 정보가 있는 곳으로 이동 /etc/group 시 시스템 계정 목록 수집 가능)
or (특정 계정의 시스템 명령 실행 내역인 .bash_history 확인을 통해 웹 어플리케이션 경로 수집 /data/webapp/WEB-INF/ 시, 설정 파일(.properties) 각종 암호 키(Key) 및 소셜(트위터) API Key("consume
r key, secret") 탈취 가능)
or (이와 같은 방법으로 소스코드의 .tar 파일, 설정파일인 .properties, .xml 파일 탈취 가능 )

해결방안
1) 파일명에 './' 또는 '\' 포함 문자열 빈 값으로 치환 (강제 경로 이동 불가)

권한 탈취

: 파라미터 변조

-> ex1) 마이페이지에서 사용자 이름 변경이 UI상으로는 제한되어 있으나, HTTP 요청을 조작하여 서버로 직접 전송 시 변경이 가능

해결방안
1) 수정하는 update 쿼리에서 변경할 수 있는 컬럼만 넣음

-> ex2) 이름과 전화번호 입력만으로 ID를 찾을 수 있고, 이를 통해 확인된 ID와 휴대폰번
호 입력만으로 임시비밀번호를 발급받을 수 있음
id 찾기시, 네트워크>응답데이터에 전체 id 노출됨

해결방안
1) 서버에서 id를 마스킹 처리해서 전달하여 응답데이터 내에서도 마스킹된 id 사용할 수 있게 함


2) 비밀번호 찾기시, 이메일 인증로직을 추가하여 임시비밀번호가 화면에 노출되지 않고 이메일로 받을 수 있게 함 (다른 분이 함)

-> ex3)

0개의 댓글