![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/oNMLs/btqAt7dBCJo/SdAoXnMRF8xt3Duvpmu1xK/img.png)
가. 원인 - 외부입력값을 검증없이 XQuery 구문 생성 및 실행에 사용 나. 영향 - 쿼리문 조작을 통한 데이터 조회 및 인증우회 다. 보안대책 - XQuery에 사용되는 외부입력값에 특수문자 및 쿼리 예약어를 필터링 - 파라미터화된 쿼리문을 사용 라. 안전한 코드 1. 파라미터화된 쿼리문 사용 String name = props.getProperty("name"); String es = "doc('users.xml')/userlist/user[uname='$xname']"; XQPreparedExpression expr = conn.prepareExpression(es); expr.bindString( new QName("xname"), name, null); XQResultSequence resu..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bQ53il/btqAvjEpFVz/c4JIRKJbthtcnNBpLg6VZ1/img.png)
가. 원인 - 외부 입력값을 검증하지 않고 외부 사이트로 자동연결 나. 영향 - 피싱사이트 연결 - 크로스 사이트 스크립트 공격 다. 보안대책 - 자동연결할 외부 사이트의 URL과 도메인을 화이트 리스트로 관리 및 사용 라. 안전한 코드 1. 화이트 리스트로 URL 검증 String allowedUrl[] = { "/main.do", "/login.jsp" }; int index = Integer.parseInt( request.getParameter("index") ); if ( index > -1 && index < allowedUrl.length ) { response.sendRedirect ( allowedUrl[ index] ); } 마. 진단방법 1. 외부 사이트로 리다이렉션 하는 함수나 메서..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/csMWOU/btqAtcsSPGo/qmfYCMKBuF4K69Po8AWgGK/img.png)
가. 원인 - 업로드되는 파일의 안정성을 검사하지 않고 업로드를 허용 - 서버측에서 실행될 수 있는 스크립트 파일(ASP, JSP, PHP 등)이 업로드 가능하며 웹을 통해 직접 실행가능 나. 영향 - 시스템 내부명령어를 실행 - 웹쉘 업로드를 통해 서버를 장악 - 키로거를 설치하여 인증정보 획득 - 악성코드가 포함된 파일을 업로드하여 사용자 PC를 감염 다. 보안대책 - 화이트리스트 방식으로 허용된 확장자만 업로드를 허용 - 업로드 파일의 크기와 갯수를 제한 - 업로드 파일의 종류를 제한 - 외부에서 접근할 수 없는 경로(Web Document Root 밖에 위치)에 파일저장 - 업로드 파일의 저장경로 및 파일명을 외부에 노출 금지 - 업로드 파일의 실행권한을 제거 후 저장 라. 안전한 코드 1. 파일..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cwXeVt/btqAtCETr4z/TCiUz9QeRFKrypyqzQd3OK/img.png)
가. 원인 - 외부입력값을 검증하지 않고 운영체제 명령문의 일부 또는 전체로 구성되어 실행 나. 영향 - 공격자가 입력한 명령어가 웹서버 권한으로 실행 - 시스템 중요파일 삭제 - 백도어 실행 - 부적절한 권한변경 다. 보안대책 - 어플리케이션에서 운영체제 명령어를 실행하지 않도록 설계 - 미리 정의되어 있는 허용목록을 검색하여 명령어가 실행되도록 설계 라. 안전한 코드 1. 허용하는 명령어 목록 사용 List allowedCommands = new ArrayList(); allowedCommands.add("notepad"); allowedCommands.add("calc"); String cmd = args[0]; if ( allowedCommands.contains(cmd) ) { Runtime.g..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/lBLMw/btqAtcl8FyD/WKZ6zKnnyHrrGiS1qng6v1/img.png)
가. 원인 - 검증되지 않은 입력값 또는 DB저장값을 동적 웹페이지 생성에 사용 나. 영향 - 클라이언트에서 악성코드 실행 - 피싱사이트 실행 - 세션 하이재킹 공격 실행 - 접속자 권한으로 부적절한 스크립트 실행으로 정보유출 다. 보안대책 - 스크립트를 삽입하지 못하도록 입력값 필터링 ( % " 등 ) - HTML태그를 허용하는 게시판의 경우 허용되는 HTML태그를 화이트리스트로 관리 및 사용 - 입력값에 정규식을 이용하여 검증 - 모든 요청에 대해 XSS 필터를 적용하여 입력값 검증 - 출력값에 HTML 인코딩 적용 - 출력값에 XSSFilter를 적용 라. 안전한 코드 1. 서블릿에서 HTML 인코딩 String data = request.getParameter("data"); data = ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/1ovEI/btqAtCLGO8U/jtFCLGGEcnWVtZJYMnKBcK/img.png)
가. 원인 - 검증되지 않은 외부입력값을 파일 및 서버의 시스템 자원에 접근하거나 식별을 허용 나. 영향 - 시스템이 보호하는 자원에 접근/수정/삭제/정보노출 - 시스템 자원간 충돌로 시스템 장애 유발 - 허용되지 않는 권한을 획득 - 인증/인가 우회 후 설정파일 열람/변경/실행 다. 보안대책 - 외부입력값을 자원(파일, 소켓포트 등)의 식별자로 사용할 경우, 검증 후 사용 - 사용자별 사용가능한 자원을 사전에 리스트로 정의 - 외부입력값을 파일 식별자로 사용할 경우, 경로순회공격 위험이 있는 문자( .. / \ ) 필터링 라. 안전한 코드 String fileName = request.getParameter("file"); FileInputStream fis = null fileName = filena..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/4MXw1/btqzOLbI2Qk/YgH2uz2vYo7tzn0PfYXXh1/img.png)
가. 원인 - 입력된 데이터에 대한 유효성 검증을 하지 않고 DB 쿼리의 일부로 사용 - 입력값 필터링 없이 동적쿼리에 적용 후 사용 나. 영향 - 로그인 인증우회 - DB 데이터 유출/수정/삭제 - 시스템 명령어 실행 다. 보안대책 - 정적쿼리 사용 - 쿼리구조를 변경할 수 있는 문자열을 검사 후 쿼리문 생성에 사용 - PreparedStatement 객체 등을 이용하여 컴파일 된 쿼리문을 사용 - DB 사용자 권한 최소화 - 500 서버오류 정보 노출 제한 라. 안전한 코드 1. JDBC API 사용 String id = request.getParameter("id"); String sql = "select * from user_info where id = ?"; Connection con = db...
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cIrbhc/btqzRNFtwWC/z1a9ViAKNKYIqzP7FuiH7K/img.png)
가. 취약점 개요 - 일정한 규칙을 갖는 세션ID가 발급되거나, 세션 타임아웃이 너무 길게 설정된 경우, 사용자 권한도용이 가능한 취약점 → (불충분한 세션관리) - 다중 스레드의 싱글톤 객체에서 멤버변수 등을 통해 서로 다른 세션 간 데이터를 공유로 인해 경쟁조건 발생하는 취약점 → 잘못된 세션에 의한 정보노출 나. 요구사항 1. 세션간 데이터가 공유되지 않도록 설계 2. 세션을 안전하게 관리 3. 세션ID를 안전하게 관리 다. 요구사항 별 고려사항 1. 세션간 데이터가 공유되지 않도록 설계 - 싱글톤 객체로 생성되는 서비스 컴포넌트 확인 - 해당 컴포넌트에 읽고 쓰기가 가능한 멤버변수, 클래스 변수를 사용하지 않도록 설계 2. 세션을 안전하게 관리 - 모든 페이지에서 로그아웃 가능하도록 UI 설계 -..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/eUo5GG/btqzP4uEw9X/aoifuo09cKX3wJ3SPkHCr1/img.png)
가. 취약점 개요 - 에러페이지를 설정하지 않아, 에러 메시지를 통해 서버 데이터 정보 등의 공격에 필요한 정보가 노출되는 취약점 → 오류 페이지를 통한 정보노출 - 에러를 통해 시스템의 내부 데이터가 공개되어, 또 다른 공격의 빌미를 제공하는 취약점 → 시스템 데이터 정보 노출 나. 요구사항 1. 명시적 예외에 대해 예외처리 블럭을 통해 예외처리 기능을 구현 2. 입력값 범위를 체크하여 정상동작을 보장 3. 상세한 에러정보를 노출하지 않도록 구현 다. 요구사항 별 고려사항 1. 명시적 예외에 대해 예외처리 블럭을 통해 예외처리 기능을 구현 - 언어별 예외처리 문법에 대한 안전한 사용방법을 기술 - 안전하게 예외처리 할 수 있도록 가이드 작성 2. 입력값 범위를 체크하여 정상동작을 보장 - 입력값에 따라..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/qf3qX/btqzQs26N4r/gWSZpSsOImyhRoWKZ9TPC1/img.png)
가. 취약점 개요 - 민감 데이터를 평문으로 송/수신하여 스니핑을 통해 정보가 노출되는 취약점 → 중요정보 평문전송 나. 요구사항 1. 민감정보 전송 시 안전하게 암호화해서 전송 2. 쿠키에 포함된 중요정보는 암호화해서 전송 다. 요구사항 별 고려사항 1. 민감정보 전송 시 안전하게 암호화해서 전송 - 중요정보를 안전한 암호모듈로 암호화 후 전송하거나 안전한 통신채널을 이용하여 전송 - "암호연산" 여구항목을 충족하는 암호화 알고리즘 및 암호키를 사용 - 클라이언트와 서버 사이에 불필요한 데이터가 포함되어 전송되지 않도록 설계 2. 쿠키에 포함된 중요정보는 암호화해서 전송 - 쿠키에 중요정보가 포함되지 않도록 설계 - 부득이하게 포함되어야 할 경우, 반드시 세션쿠키로 설정 - 쿠키로 전달되는 중요정보는 ..
- Total
- Today
- Yesterday