본문 바로가기

전체 글106

geoserver 서버 버전 정보 제거 geoserver는 서버로 기본 jetty를 사용하고 있는 것 같다.서버에 요청을 하고 네트워크를 확인하면 응답 헤더에 서버 정보가 포함되어 있어 보안 사항으로 수정하기로하였다.  아래와 같이 geoserver의 start.ini에 설정값 하나만 변경하면 간단히 해결된다.jetty.httpConfig.sendServerVersion=false 변경 후 확인하면 응답헤더에 서버정보가 표시되지 않는 것을 볼 수 있다. 2024. 7. 5.
geoserver 관리자 페이지 비활성 geoserver admin page disable관리자 페이지를 확인하면 다음과 같이 웹에서 접근이 가능한데 이를 비활성화 시키려고 한다. 관리자 페이지 비활성화는 web.xml에 다음의 설정을 추가하면 된다. GeoServer Web Admin Pages /web/* disabled 또는 nginx나 apache와 같은 서버를 앞에 두고 핸들링 하면 될것이다.비활성화가 되면 403에러로 떨어지며 접근이 막히는 것을 볼 수 있다.유지보수를 위해서는 local에서만 접근이 가능하도록 하는 것이 더 효율적이겠다. 2024. 7. 5.
Math.random 보안 취약 사항 (적절하지 않은 난수값 사용) CWE-330, CWE-338 JavaScript에서 Maht.random값을 사용하니 CWE-330, CWE-338에 대한 보안취약점이 있다는 것을 알게 되었다. GPT는 해당 코드에 대해 다음과같이 설명하고 있다. HTML 삽입 미리보기할 수 없는 소스 즉, 해당 함수는 공격자가 SW에서 생성되는 다음 숫자를 예상하여 시스템을 공격할 수 있다라는 것이다. 따라서 예측하기 어려운 숫자를 생성해야 하는데 다음과 같은 방법으로 대체 가능하다. let uint32Array = new Uint32Array(1); // Web Crypto API를 사용하여 암호학적 PRNG로 임의의 숫자를 생성 window.crypto.getRandomValues(uint32Array); const randomNumber = uint32Array[0] / .. 2024. 3. 7.
오라클 복구 쿼리 실수로 delete문을 실행하여 데이터를 지워 당황한 적이 있었는데 다행히 오라클은 복구를 할 수 있는 방법이 있었습니다. 다음은 삭제된 데이터를 조회하는 예시와 복구 방법입니다. 10분 전 데이터 조회 쿼리 SELECT "컬럼" FROM "테이블" AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE) 2024년 1월 31일 데이터 조회 쿼리 SELECT "컬럼" FROM "테이블" AS OF TIMESTAMP(TO_DATE('20240131000000', 'YYYYMMDDHH24MISS')) 10분 전 데이터 복구 쿼리 INSERT INTO "테이블" SELECT "컬럼" FROM "테이블" AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10.. 2024. 1. 31.
javascript 해당 월의 주차, 시작일과 종료일 구하기 해당월의 주차를 구해야하는 일이 생겼다. moment등에서 일반적으로 사용되는 주차를 반환하는 함수나 계산 방법으로는 요구사항에 맞지 않았기에 계산방법을 조금 다르게 하였다. 구하고자 하는 주차의 방식은 다음과 같다. 2023년 12월의 주차는 6주차이다. 1주차의 시작일과 종료일은 2023-11-26 ~ 2023-12-02 이며, 6주차의 시작일과 종료일은 2023-12-31 ~ 2024-01-06 이다. 이를 구하기 위해 자바스크립트로 다음과 같은 코드를 구현하였다. // 해당월의 주차가 몇주차 까지 있는지 체크 function getWeekLength(start, end) { const startDate = start.clone(); const endDate = end.clone(); const w.. 2023. 12. 27.
data pivot 데이터 피벗만들기. feat rxjs 기록을 위해 작성. 기존 데이터를 pivot형태로 만들기. 1. 데이터 준비 (시간별 랜덤값) const data = new Array(24).fill(0).map((n,i)=> ({ h:i+1, val1: Math.ceil(Math.random(1, 10)*10), val2: Math.ceil(Math.random(1, 10)*10) })) 2. 데이터 피벗 (rxjs and reduce) const subs = rxjs.from(data).pipe( rxjs.reduce((acc, item) => { acc[0][item.h] = item.h; acc[1][item.h] = item.val1; acc[2][item.h] = item.val2; return acc; }, [{}, {}, {}]) ); .. 2023. 12. 18.
mybatis 컬럼 누락 현상 스프링부트에서 다음의 설정으로 mybatis를 이용 중 implementation('org.mybatis:mybatis:3.4.4') implementation('org.mybatis:mybatis-spring:1.3.1') Select를 하면 컬럼이 누락되는 현상이 발생했다. 이슈사항을 찾아보니 조회한 컬럼의 모든 값이 null일 경우 map, dto 상관없이 null로 반환하는 듯 하다. 아래는 조회시 반환된 결과이다. [null, {area=서울}, {area=강원}, null, {area=경북}] 그 때문에, gridjs에 바인딩 시, parsing 오류로 화면이 의도대로 출력되지 않았다. 찾아보니 3.2.x 이후에서는 returnInstanceForEmptyRow를 설정하면 되는듯 하다. 아래는.. 2023. 10. 5.
postgresql sequence 사용하기 postgresql의 sequence에 대해서 다음과 같은 명령어들이 있다. 다음의 가상 테이블이 있다고 가정한다. table명 : member column명 : member_id, member_name 시퀀스 생성 -- serial4를 입력하여 자동으로 시퀀스를 생성하는 방법 CREATE TABLE member ( member_id serial4 NOT NULL, member_name varchar NOT NULL, ); -- mem_seq를 수동으로 생성하고 관리하는 방법 CREATE SEQUENCE mem_seq START 1; CREATE TABLE member ( member_id int4 NOT NULL DEFAULT nextval('mem_seq'::regclass), -- 회원번호 memb.. 2023. 8. 24.
cx_Oracle 설치하기 파이썬에서 cx_Oracle을 사용하여 오라클에 접속해보자. sudo의 권한을 가지고 있다고 가정하고 진행해보자. 우선 오라클 클라이언트에 접속하기 위해서는 네이티브 모듈이 필요하다. 상세한 방법은 다음을 참고하여도 좋다. https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html 진행 방법으로는 다음과 같다. 1. 설치할 폴더 생성 mkdir /opt/oracle 2. 모듈 다운로드 wget https://download.oracle.com/otn_software/linux/instantclient/216000/instantclient-basic-linux.x64-21.6.0.0.0dbru.zip 3. 압축 풀기 unzip insta.. 2023. 8. 17.