1. 안전하지 않은 예외처리 - 프로그램에서 발생되는 예외를 처리하지 않거나 적절하게 처리하지 않는 경우 - e.printStackTrace() : IDE 툴에서 자동으로 만들어주는 에러 스택 출력 메소드이다. 이 오류 메시지에는 시스템에 대한 상세한 정보가 출력된다. - 로그 파일에 예외시 출력된 스택 정보가 저장 되어 있는 지 확인하고, 스택 정보가 있다면 해당 사이트에 접속해 에러를 발생시켜 에러 처리 상태를 확인한다. 2. 예외처리 1 2 3 4 5 6 7 8 9 10 11 StringBuffer buffer = new StringBuffer(); String data = request.getParameter("data"); try{ data.trim(); } catch (Exception e) ..
1. 파일 업로드 / 다운로드 취약점 - 업로드 기능에서 파일 사이즈의 제한을 주지 않을 경우 - 파일 타입의 체크가 없는 경우 - 파일이 업로드 되는 경로가 외부에서 직접적으로 접근 가능하거나 실행 권한을 가지게 되는 경우 2. 취약점 제거를 위한 보안코딩 기법 - 업로드 되는 타입이나 확장자를 체크하여 허용되는 확장자 또틑 타입의 경우에만 업로드 할 수 있도록 한다. - 업로드 되는 파일은 외부에서 직접 접근이 불가능한 경로에 저장한다. - 업로드되는 파일의 이름과 실제 저장되는 파일의 이름을 다르게하여 공격자가 파일을 직접 엑세스 할 수 없도록 한다. 3. 시큐어 코딩 - 파일 확장자를 체크한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 if( !uplo..
크로스 사이트 요청 위조 : 사이트가 신뢰하는 사용자(인증된 사용자)를 통해 공격자가 원하는 명령을 대신 실행하게 된다. 대부분의 웹사이트에서 사용자가 보내는 요청 데이터가 정상적인 경로를 통한 요청인지 구분하지 못한다. 1. GET 방식 CSRF : 공격자는 게시판 등에 이미즈 태그를 보이지 않도록 사이즈를 최소화하여 자신의 계좌로 이체를 수행하는 요청 URL을 삽입해, 사용자가 해당 글을 클릭했을 때 계좌 이체가 실행되도록 공격할 수 있다. 2. POST 방식 CSRF : 가장 많은 CSRF 공격방식은 자동 글쓰기 이다. 3. 대응기법 : CSRF 공격 취약점을 예방하려면 실제 사용자의 브라우저에서 이볅된 값을 이용해 요청이 발생되었는지를 서버에서 점검할 수 있도록 해야 한다. - CSRF 를 근본적..
크로스 사이트 스크립팅 ( XSS ) : 게시판, 웹 메일 등에 삽입된 악의적인 스크립트에 의해 페이지가 깨지거나 다른 사용자의 사용을 방해허거나 쿠키 및 기타 개인정보를 특정 사이트로 전송시키는 공격 ( NAVER 지식백과 ) XSS 공격 유형에는 Reflective XSS, Stored XSS, DOM XSS 세 가지가 존재한다. 1. Reflective XSS - 공격자가 악성 스크립트가 포함된 URL을 클라이언트에게 노출시켜 클릭하도록 유도하여 쿠키 정보를 탈취하거나, 피싱사이트, 불법 광고 사이트로 이동하게 한다. - JSP나 서블릿 코드에서 사용자의 입력 값을 검증하지 않고 그대로 브라우저로 출력하는 경우 발생한다. - 텍스트 필드에 를 입력하여 전송버튼을 눌렀을 때, Alert 창이 뜨게 된..
1. 로그인 시도 횟수 제한 - 로그인 시도 횟수에 제약을 주지 않는다면 공격자는 툴을 이용하여 무작위 대입 공격을 시도해 사용자의 로그인 정보를 얻을 수 있다. - 때문에 로그인 시도에 대한 횟수를 체크하여 계정에 대한 보호조치를 취하여 대입공격을 막아야 한다. - Standalone 서버에서 Singleton Pattern 의 코드를 사용하면 편리하다. 2. Singleton Pattern ? - 객체를 한번만 생성하고, 그 객체에 접근이 가능하도록 하는 기능 - 객체 생성할 때 실행되는 생성자는 private로 접근을 막는다. - 기존의 방법으로 생성자를 매번 생성한다면 객체마다 값이 달라지지만 Singleton을 이용하면 값이 같아진다. 3. Singleton Pattern을 이용한 로그인 시도 ..
1. 일반적으로 권고되는 패스워드 정책 - 대/소문자, 숫자, 특수문자를 혼용하여 8 글자 이상의 패스워드를 사용하도록 한다. - 동일 문자를 연속 4회이상 사용하지 못하도록 한다. - 패스워드 히스토리를 관리해 2~3개 이상 동일 패스워드를 사용하지 못하도록 한다. - 패스워드 변경 주기를 설정한다. ( 패스워드 유효기간을 90일 이하로 설정 ) - 연속적인 숫자/문자 조합 및 생일, 전화번호 등 추측하기 쉬운 패스워드 사용을 금지한다. - 사전에 나오는 쉬운 단어나 이름은 패스워드로 사용하지 못하도록 한다. - 기본 설정된 패스워드는 사용하지 못하도록 설정한다. - 초기 부여된 패스워드는 사용자 최초 접속시 변경하도록 한다. 2. 패스워드 체크를 위한 시큐어 코딩 기법 권고되는 패스워드 정책 중에서 ..
1. if MyBatis에서 가장 공통적으로 사용되는 요소 파라미터 타입안에 다른 클래스(타입)이 포함되어 캡슐화를 이룰 경우 .(dot) 연산자로 접근 가능하다. 실습 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 SELECT /* [ArticleDAO.getAllEmployeeInfo] [20160420] */ EMPLOYEE_ID employeeId , FIRST_NAME firstName , LAST_NAME lastName , EMAIL email , SALARY salary , COMMISSION_PCT commissionPct , HIRE_DATE hireDate , D.DEPARTMENT_NAME departmentName FROM E..
1. Parameters 쿼리의 파리미터 ( PreparedStatement 의 " ? " 는 Spring 에서는 #{ 멤버변수명 } 을 사용한다. 만약 VO를 가져와서 VO의 파라미터를 넣고 싶다면 #{ } 괄호 안에 VO의 변수를 그대로 넣는다. 그려면 VO의 getter가 소환되어 변수의 값으로 들어간다. Parameter를 전달하는 방법은 DAO에서 쿼리문을 수행할 때 전달해 줄 수 있다. 이때 parameter를 쓰는 자리에는 무조건 하나만 쓸 수 있다. 그러므로 여러개의 parameter를 보낼 경우 Map을 사용해야 한다. 첫번째, 가장 기본적인 방법은 하나의 값을 parameter로 전달하는 것이다. 1 2 String lastName = "King"; return getSqlSession..
1. ORM : Object Relational Mapping Framework - 간편한 트랜잭션( 작업단위를 모아둔 것) 과 일관된 설정으로 데이터베이스의 접근이 용이하다. - 커넥션풀의 자동 지원으로 복잡한 설정이 따로 필요하지 않다. 2. MyBatis 연동하기 먼저 MyBatis 연동을 위한 Dependency를 추가한다. 총 6개의 Dependency 를 추가한다. Connection Pool을 지원하는 DataSource를 생성하기 위하여 rootContext.xml을 생성하여 아래의 코드를 추가한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39..
파일업로드 pom.xml 의 Dependencies에 file upload dependency를 추가한다. 파일 업로드를 할 때 form에서 enctype을 "multipart/form-data"로 정의해야한다. multipart 기능을 사용하기 위해서 applicationContext.xml 에 MutipartResolver를 스프링 설정으로 등록시켜 준다. 1 2 3 4 5 Colored by Color Scripter cs MultipartResolver는 enctype이 multipart/form-data 형식으로 데이터가 전송되었을 때 해당 데이터를 Spring MVC에서 사용할 수 있도록 변환해준다. Controller에 File Upload 추가 1 2 3 4 5 6 7 8 9 10 Mult..
- Total
- Today
- Yesterday
- INSERT
- table
- 자바
- list
- 안드로이드 비콘
- servlet
- 예외처리
- onBackPressed
- controller
- mybatis
- maven
- BFS
- onPostExecute
- indexOf
- DP
- 안드로이드 스튜디오
- 이클립스
- java
- algorithm
- REDIRECT
- Spring
- jsp
- sort
- RequestMapping
- DFS
- order by
- boj
- restfb
- Baekjoon Online Judege
- AlertDialog.Builder
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |