
보안 취약에 대비하기 위해 서버단에서 처리 필요
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)