0. 개요고객사에서 현재 내가 유지보수를 담당한 프로젝트의 보안 취약점에 대해 조치 요청이 왔다. 그 중 구현 방법을 선택하는데 가장 시간이 오래 걸렸던 문제를 소개하고자 한다.1. 문제현재 게시글에서 첨부 파일을 다운로드할 때, 정수인 fileIdx를 파일의 식별자로 사용하고 있다. 이 값은 사용자에게는 파일을 조회할 때 Database에 적용된 함수를 사용해 base64로 인코딩되어 전달되고 있었다. 따라서 인코딩 방식만 알게 된다면 해당 값을 변조해 다른 권한이 없는 다른 파일에 접근할 수 있는(불충분한 인가) 취약점이 발견되었다.2. 해결 방법 후보이 취약점을 해결하기 위해 생각한 방법들은 다음과 같았다.파일 식별자 AES-256로 암호화Database에 함수 추가AOP방식으로 실시간 암호화파일 ..
전체 글
개요 트랜잭션(Transaction)은 데이터베이스의 논리적 연산 단위로, 분할할 수 없는 최소의 단위이다. 트랜잭션은 밀접히 관련되어 분리될 수 없는 하나 이상의 데이터베이스 조작을 가리키기 때문에 전부 적용되거나 전부 취소(All or Nothing)되어야 한다. 올바르게 반영된 데이터를 데이터베이스에 적용하는 것을 커밋(Commit), 트랜잭션의 시작으로 되돌려 취소하는 것을 롤백(Rollback)이라고 한다. SQL의 UPDATE, INSERT, DELETE 등 데이터를 수정하는 DML 문이 트랜잭션의 직접적인 대상이다. SELECT 문장은 배타적 락(Lock)의 대상으로서, 트랜잭션으로부터 간접적인 영향을 받는다. 목적 트랜잭션은 데이터베이스의 무결성을 위해 사용된다. 데이터베이스의 무결성이란 ..
객체를 비교할 때 사용하는 메서드인 equals()와 hashcode()를 알아보자. 다음과 같은 클래스가 있다고 생각해보자. 생성자, getter(), setter(), toString()은 생략되었다. equals(Object obj)와 hashCode()는 java.lang.Object 클래스의 메서드이기 때문에, 자바의 모든 클래스에서 import할 필요없이 사용할 수 있다. package com.blog.ex; public class Person { private String name; private int age; } equals(Object obj) equals()는 두 객체가 같은지 비교할 때 사용하는 메서드이다. name과 age가 같은 Person 객체 두 개 만든 후, equals()..
프레임워크란 어플리케이션을 개발할 때 사용할 수 있는 기본적인 구조를 제공하는 도구 모음이다. 프레임워크는 개발자가 일정한 규칙이나 구조를 따라 코드를 작성할 수 있도록 도와주며, 어플리케이션을 개발할 때 필요한 데이터베이스 연결, 웹 서버 설정, 보안 처리 등의 많은 작업을 자동으로 처리한다. 따라서 개발자는 반복적인 작업을 줄이고 어플리케이션의 핵심 기능에 집중할 수 있다. 프레임워크의 장점 개발 생산성 향상: 프레임워크는 개발자가 어플리케이션을 개발하는 데 필요한 많은 작업을 자동으로 처리해 개발 생산성을 향상 시킨다. 유지보수성 향상: 프레임워크는 어플리케이션의 구조를 일정하게 만들어 유지보수성을 향상시킨다. 확장성 향상: 프레임워크는 어플리케이션의 기능을 확장하기 쉽도록 설계되었다. 웹 애플리케..
6장 : Ajax (1) Ajax Ajax의 의미: Asynchromous Javascript and XML의 약자로, 전체 페이지를 새로 고치지 않고도 페이지의 일부 만을 위한 데이터를 로드하는 기법 → 클라이언트 쪽에서 가치가 있는 데이터만 서버에 전달함 원리: 자바스크립트를 사용한 비동기 통신으로, 브라우저가 가지고 있는 XMLHttpRequest 객체를 이용함 동기 vs 비동기 Synchronous Asynchromous blocking 방식 non-blocking 방식 전송과 회신이 하나의 짝으로 이루어짐 (보내기 - 받기) 회산과 상관없이 전송이 가능함 (보내기 - 보내기 - 받기- 받기) 순차적인 작업에서 사용함 효율적인 활용이 가능함 XMLHttpRequest.send()의 return을 ..