Mybatis에서 동적 SQL 작성에 필수적인 ${}와 #{}의 차이점과 사용 방법을 설명한다. ${}는 문자열 치환으로 SQL Injection 위험이 있어 안전하지 않다. 반면, #{}는 PreparedStatement를 이용한 값 바인딩으로 SQL Injection을 방지하며, 안전하고 디버깅이 쉽다. 일반적으로 보안을 위해 #{} 사용이 바람직하다. ✨시작하며 Mybatis는 데이터베이스와의 상호 작용을 돕기 위해 동적 SQL 작성에 유용한 기능을 제공해 준다. 여기서 주로 사용되는 $과 #의 차이점에 대해 알아두고, 상황에 따라 적절한 방법으로 사용하는 것이 좋겠다고 생각되어 정리하게 되었다. ${}와 그 사용 예시 ${}은 파라미터가 문자열로 치환되기 때문에 SQL Injection이 발생할 ..
input에 오직 숫자만 입력받으려고 한다. 따라서 0~9가 아닌 문자열은 모두 제거하면 된다. 여기서 onKeyup은 키보드의 키를 눌렀다가 뗐을 때 발생하는 이벤트다. onKeyup="this.value=this.value.replace(/[^0-9]/g,'');" HTML 삽입 미리보기할 수 없는 소스 this.value는 현재 input 필드의 값을 말한다. 현재 input 필드에 '문자 테스트123'이라는 값이 있다고 가정하면 this.value는 '문자 테스트123'이 된다. 다음에 '문자 테스트123'이라는 값을 replace 한다. /[^0-9]/g는 정규 표현식으로, 숫자가 아닌 모든 문자를 의미한다. ^는 not을, 0-9는 숫자를, g는 global을 의미해 문자열 내에서 대상을 모두..
비회원이 작성한 비밀글에 대한 URL 직접 접근이 가능한 문제를 발견하였고, 이를 해결하기 위해 세션에서 검증이 완료되었는지 확인하는 단계를 추가하였다. 특히, 비밀번호 인증 성공 시 세션에 인증 정보를 저장, 이후 접근 시 인증 여부를 검증하는 로직을 구현하였다. 또한, 세션 유지 시간을 설정하는 방법에 대해서도 설명하였다. ✨시작하며 전자정부 프레임워크에서 프로젝트 수행 중 비회원이 작성한 비밀글에 대해 URL 직접접근이 가능한 것을 확인했다. list로 불러올 경우 비밀글에 접근하려면 암호를 입력해야 하지만, view로 직접 URL을 입력해 접근하면 암호 입력 과정 없이 글에 접근할 수 있게 된다. 이렇게 되면 URL을 유추하거나 URL을 입력해 타인의 게시글에 접근이 가능해진다. 따라서 list에..
CKEditor 4 사용 중 발견한 보안 취약점과 이를 해결하기 위한 과정을 설명하는 글이다. WYSIWYG 에디터인 CKEditor에서 소스 편집 기능을 활용할 때 보안 규칙이 적용되지 않는 문제를 발견하고, 이를 해결하기 위해 여러 방법을 시도해 보았다. HCL AppScan Source를 활용해 보안 취약점을 찾아내는 과정, Eclipse IDE에 플러그인을 설치하는 방법, 그리고 진단 결과까지 자세히 기술하였다. 이 글을 통해 보안 취약점 테스트와 이를 해결하는 방법에 대한 이해를 돕고자 한다. ✨시작하며 현재 내가 진행 중인 프로젝트에서는 WYSIWYG 에디터로 CKEditor 4를 사용하고 있다. CKEditor에서는 소스 편집 기능을 제공한다. 일반적으로 사용자가 에디터에 글을 작성 시 보안..
이스케이프 시퀀스란 백슬래시() 뒤에 한 문자나 숫자 조합이 오는 문자 조합을 말한다. 이 에러를 해결하기 위해선 Java 문자열에서 백슬래시()를 표현하기 위해선 이스케이프 문자로서의 백슬래시(\)를 사용해야 한다. 원인 File file = new File("\git\endangered\WebContent\images\20231102015937083_1207_0.jpg"); 첨부파일 업로드 중 파일 타입 테스트를 위한 코드를 추가했다. new File의 파일 경로 부분에서 유효하지 않은 이스케이프 시퀀스라는 에러가 발생했다. escape sequence(이스케이프 시퀀스) 백슬래시(\) 뒤에 한 문자나 숫자 조합이 오는 문자 조합을 말한다. 아래는 오라클에서 제공하는 이스케이프 시퀀스에 관한 문서 중..
parameter는 함수 정의 시 사용되는 변수로, 함수와 메서드의 입력 변수명을 의미한다. 반면, argument는 함수 호출 시 넘기는 변숫값을 의미한다. 또한, 인수와 인자는 같은 말이지만, 매개변수와 인자(인수)는 다른 말이라는 것을 잊지 말아야 한다. ✨시작하며 개발을 공부하며 헷갈려했던 parameter와 argument의 차이에 대하여 정리해 보았다. Prameter(매개변수) 함수와 메서드 입력 변수명(Variable)으로, 함수 정의 시 사용되는 변수를 말한다. function plus (num1, num2) { return num1 + num2; } 여기서 num1과 num2는 parameter이다. Argument(인자) 함수와 메서드의 입력 값(Value)으로, 함수 호출 시 넘기는..
JPEG 이미지임에도 불구하고 파일 업로드가 되지 않아 파일 시그니처를 체크하게 되었다. 결과적으로, 문제의 파일이 실제로는 PNG 파일이었고, 확장자를 수정하여 업로드하니 정상적으로 작동하는 것을 확인했다. 이미지 파일 업로드 중 에러 발생 시, 파일 시그니처를 체크하라는 교훈을 얻었다. 원인 Metadata metadata = ImageMetadataReader.readMetadata(f1); 이미지 파일이 업로드가 되지 않는다는 이슈를 전달받고 디버깅을 진행하던 중, 위의 코드에서 File format is not supported라는 에러가 발생하는 것을 파악했다. jpg 확장자인 다른 파일들은 업로드되는데 이 파일이 타입 에러로 업로드되지 않는다는 게 이상해 파일 타입을 검사하는 코드를 추가했다..
게시글의 예약번호 첫 글자가 3인지 아닌지를 charAt을 사용해 판별하던 중 문제가 발생했다. 이를 해결하기 위해 java.lang.String 클래스의 substring() 메서드를 활용하여 예약번호 첫 글자를 잘라내고, 비교 연산자를 사용해 3인지 아닌지를 검증했다. 이 과정에서 ==와 eq의 사용에 대한 고민이 있었으나, GPT의 조언을 따라 특정 상황에서 둘 중 어느 것을 사용해도 큰 차이가 없음을 알게 되었다. ✨시작하며 전자정부 프레임워크에서 프로젝트 수행 중 게시글의 예약번호의 첫 글자가 3일 경우와 아닐 경우를 charAt을 사용해 구분해주었다. charAt을 사용해 구분하는 것이 잘못된 방법이었는지 예약번호의 첫 글자가 3임에도 계속 eq쪽 jstl이 아닌 ne쪽 jstl을 탔다. 그래..
lucy-xss-servlet-filter와 multipartFilter 적용 후 이슈가 발생했다. CMS에서 Ckeditor를 통해 작성한 글에서 태그가 그대로 노출되는 현상을 발견하고, lucy-xss-servlet-filter-rule.xml의 url-rule-set 수정을 시도했으나 실패했다. 이후 XssPreventer.unescape를 이용한 특수문자 역치환 작업을 수행하여 문제를 해결했다. ✨시작하며 전자정부 프레임워크에서 프로젝트 수행 중 lucy-xss-servlet-filter와 multipartFilter를 적용한 후, 다시 기능 개발을 하며 테스트 및 수행을 하고 있었다. CMS에서 Ckeditor를 통해 글을 작성한 다음 Reservation Detail 페이지에서 태그가 그대로 ..
Board Name을 확인하고 비회원을 처리하는 과정에서 문자열 비교를 위해 == 연산자를 사용했으나, 에러가 발생하고 말았다. 문자열을 비교할 때는 == 연산자 대신 equals 메서드를 사용해야 한다는 것을 알게 되었다. == 연산자는 객체의 주소 값을 비교하는 반면, equals 메서드는 객체의 값 자체를 비교하는 차이가 있다. ✨시작하며 전자정부 프레임워크 기반 프로젝트 중 게시판 Board Controller에서 Board Name이 지정한 값과 동일할 경우 해당 게시판에서 session값 검증을 통해 비회원을 따로 처리하는 조건문을 만들었다. 그런데 여기서 == 연산자를 사용하여 문자열을 비교하는 바람에 비회원일 경우에도 if문에 걸리지 않고 게시판 화면으로 정상적으로 넘어가버렸다. 기존의 코..
클래스, 메서드, 인스턴스 등의 기본 개념과 활용 예시를 다루며, 각각의 용어가 어떻게 코드 내에서 작동하는지를 이해하는 데 도움을 준다. 이를 통해 절차 지향 프로그래밍에서 객체 지향 프로그래밍으로의 전환이나 코드의 가독성 향상, 중복 선언을 피하는 방법 등에 대해 배울 수 있다. 또한, 클래스와 인스턴스의 차이, static의 사용, 생성자와 this의 활용 등에 대한 설명도 포함되어 있다. OOP 객체 지향 프로그래밍(OOP, Object Oriented Programming)은 클래스를 중심으로 프로그램의 구조를 만들어나가는 컴퓨터 프로그래밍 방법론을 의미한다. 이런 방법론을 언어 차원에서 제공하는 언어를 객체 지향 언어라고 한다. 또, 메서드를 다른 컴퓨터 언어에서는 function이나 subr..
람다 표현식을 통한 함수형 프로그래밍, 스트림 API를 사용한 데이터 추상화, java.time 패키지를 이용한 날짜와 시간 API의 변화, 그리고 나즈혼을 통한 자바스크립트 엔진의 변화 등에 대해 자세히 알아볼 수 있다. 각 기능의 특징과 예시를 통해 Java8의 변화와 발전을 이해하는 데 도움을 준다. 특히, 기존 방식과 비교하여 Java8에서 어떤 개선점이 생겼는지에 대해 집중적으로 다루고 있다. Java8 람다 표현식 (Lambda Expression) 함수형 프로그래밍 식별자 없이 실행할 수 있는 함수 표현식으로, 익명 함수 (anonymous function)라고도 부른다. 메소드를 람다 표현식으로 표현하면 클래스를 만들고 객체를 생성하지 않아도 메소드를 사용할 수 있으며 메소드의 매개변수로 ..
운영체제와 독립적으로 실행되는 자바의 특징, 자바 컴파일러와 바이트 코드, 자바 가상 머신(JVM)의 역할과 구성, 그리고 자바 프로그램의 구성 요소인 클래스, 필드, 메서드 등에 대해 설명하고 있다. 또한, 표준 입출력 클래스와 명령문, 주석 등의 사용 방법도 소개하고 있다. Java 운영체제와 독립적 실행 타 언어에 비해 쉬운 난이도 타 언어에 비해 높은 안정성 연산자 오버로딩 금지로 인한 코드 가독성 향상 (제네릭 도입) 타 언어에 비해 느린 실행 속도와 긴 길이의 코드 썬 마이크로시스템즈(Sun Microsystems)사의 제임스 고슬링(James Gosling) 팀에 의해 개발된 객체 지향 프로그래밍 언어로, JVM(Java Virtual Machine)이라는 자바 가상 머신을 사용해 운영체제와..
(10718) We love kriii 문제 설명 ACM-ICPC 인터넷 예선, Regional, 그리고 World Finals까지 이미 2회씩 진출해버린 kriii는 미련을 버리지 못하고 왠지 모르게 올해에도 파주 World Finals 준비 캠프에 참여했다. 대회를 뜰 줄 모르는 지박령 kriii를 위해서 격려의 문구를 출력해주자. 출력 두 줄에 걸쳐 "강한친구 대한육군"을 한 줄에 한 번씩 출력한다. 입출력 예제 출력 강한친구 대한육군 강한친구 대한육군 코드 나의 풀이 public class Main { public static void main(String[] args) { System.out.println("강한친구 대한육군"); System.out.println("강한친구 대한육군"); } }
내 블로그 - 관리자 홈 전환 |
Q
Q
|
---|---|
새 글 쓰기 |
W
W
|
글 수정 (권한 있는 경우) |
E
E
|
---|---|
댓글 영역으로 이동 |
C
C
|
이 페이지의 URL 복사 |
S
S
|
---|---|
맨 위로 이동 |
T
T
|
티스토리 홈 이동 |
H
H
|
단축키 안내 |
Shift + /
⇧ + /
|
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.