전체 글

XXE Injection이란 무엇인가?XML External Entity(XML 외부 개체 주입)오늘 날에는 데이터를 주고받을 때 대부분 JSON을 사용하지만 아직도 XML을 사용하는 곳이 많이 존재한다. XML을 통해 데이터를 주고받는 기능에서 외부 개체 참조를 시도할 때 발생하는 취약점이다. 이를 통해 서버 내의 자원들을 무단 열람할 수 있게 된다. 공격 대상XML 파싱 기능이 있는 어플리케이션에 대해 공격을 시도한다.기존의 레거시 시스템에서는 메시지 바디에 XML 형태로 데이터가 전송되는 경우가 있다. 그런 경우 XML 파싱 기능이 존재함을 확인할 수 있다. 하지만 최근 기업들은 데이터 전송 포맷으로 JSON을 사용하기 때문에 공격 대상이 레거시 시스템을 운영하는 기존의 기업들로 한정된다. 따라서 ..
OS Command Injection이란? 운영체제 명령어 주입으로,원격으로 시스템 명령어를 실행하여 공격자 의도대로 서버를 제어하는 공격이다.DMZ 구간의 웹 서버의 취약점이 발생하여 공격자가 해당 서버의 제어권을 얻는다. 즉, 시스템 명령어 실행이 가능하다. 이는 시스템의 중요 정보 즉, 소스 코드 정보, 설정 파일 등의 읽기, 삭제, 수정 권한을 얻게 되는 것이다.  공격 대상 SQL Injection vs OS Command Injection SQL InjectionOS Command Injection공격 방식SQL 구문 삽입시스템 명령어 삽입공격 결과중요 데이터 탈취중요 데이터 탈취, 네트워크 침투, 서버 졈령위험도중상 💡 OS Command Injection이 SQL Injection보다 위..
SQL Injection이란 무엇인가?구조화된 질의 언어를 주입하는 공격사용자의 입력값에 SQL 구문 삽입을 통해 변조된 SQL 구문으로 질의를 하는 취약점을 통해 다양한 공격이 가능하다. 취약점 발생 원인 입력값 검증 미흡으로 인해 미완성된 SQL 구문에 사용자 입력값이 조합될 때 발생한다. 취약점 유/무 판별 방법사용자 입력 - 숫자형산술 연산자를 통해 판별 가능하다.String query = “select * from board where idx=” + idx +”;http://127.0.0.1/insecure_website/index.php?page=view&idx=4-3http://127.0.0.1/insecure_website/index.php?page=view&idx=(case(http://..
웹 해킹이란웹 서비스 상에서 발생될 수 있는 모든 보안 허점을 이용하여 악의적인 행위를 하는 것을 말한다. 방화벽과 웹 해킹방화벽의 등장으로 접근 가능한 웹애 대한 공격이 증가하였다.모바일 앱도 결국 웹 서버와 통신을 하므로 공격자 관점에서는 웹 서비스가 유일한 공격 경로가 된다. 웹 해킹을 통한 피해 영역해킹의 목적이 과시에서 이윤(돈)으로 변하고 있다. 웹 해킹이 발생하는 원인입력 값 검증 부재injectionxss취약한 인증 및 접근 통제중요정보 노출과도한 에러 정보웹 프록시 도구를 통한 노출부적절한 설정세션 타임아웃 관련web-inf 관련서버/프레임워크 취약점스트럿츠 취약점 : 아파치 스트럿츠에서 발견된 원격 코드 실행(RCE)을 허용하는 취약점설계 오류 웹 해킹 필수 도구, 웹 프록시프록시란?웹..
서버 최초 실행 시 Open API를 통해 데이터를 조회하여 DB에 저장하는 로직을 구현했다. 하지만 두 가지의 데이터를 각각 조회해야 하는데 기존 코드의 경우 동기적으로 수행하고 있었다. 데이터 수가 적을 경우엔 성능 차이가 크지 않지만, 조회할 데이터의 양이 많기 때문에 동기적으로 수행될 경우 조회 및 저장에 소요되는 시간이 많아진다. 이를 해결하기 위해 Spring에서 제공하는 Async 기능을 이용하여 비동기 처리를 적용하여 시스템의 전체적인 수행 시간을 개선하고 리소스를 효율적으로 사용하려고 한다. 비동기란?요청과 결과가 동시에 일어나지 않는다는 뜻이다.즉 작업을 요청하고 해당 요청에 대한 결과를 기다리지 않아도 된다. 이를 통해 여러 작업들을 병렬적으로 처리할 수 있다. @Asy..
이전 포스팅에서는 WebClient를 사용하여 1번째 페이지에 해당하는 데이터를 조회하고 DB에 저장하는 과정을 수행했다. 이번에는 모든 데이터를 저장하기 위해 전체 페이지 수를 계산하고 반복문을 통해 모든 데이터를 조회하려고 한다. 1. 응답 데이터에서 필요한 값 파싱하기 String pharmacyInfo = webClient.get() .uri(uriBuilder -> uriBuilder .path(PHARMACY_ENDPOINT) .queryParam("serviceKey", PHARMACY_API_KEY) .queryParam("_type", "json") .build()) .retrieve() .bodyToMono(String.class) .block(); JSONParser parser = ..
WebClient 선정 이유최근 Spring 3.2부터 추가된 RestClient를 사용하면 기존의 RestTemplate의 직관적이지 못한 사용성과 WebClient의 의존성 문제를 해결할 수 있다. 하지만 외부 여러 API를 통해 대량의 데이터를 조회해야 하므로 비동기적 수행이 필수적이다. RestClient에서는 비동기 기능을 찾아볼 수 없었으므로 비동기 방식을 지원하는 WebClient를 사용하려고 한다. WebClientConfig@Configurationpublic class WebClientConfig { @Value("${open-api.base-url}") private String BASE_URL; @Bean public WebClient pha..
· Etc
Google-Java-Style-Format 적용 1. IntelliJ IDEA > Settings 선택 2. Preferences > Editor > Code Style 선택 3. Scheme > Import Scheme > IntelliJ IDEA code style XML 선택 4. https://github.com/google/styleguide에 접속하여 intellij-java-google-style.xml 파일을 다운받은 후, 파일을 open하고 저장 5. GoogleStyle로 변경 완료 Google-Java-Style-Format 사용법 Mac 기준 Option + Command + L을 누르면 포맷에 맞게 코드가 변경된다. 파일을 저장할 때마다 formatter 작동시키기 1. Inte..
jyjyjy25
기록하는 습관