도서관에 도서 자동 요청 프로젝트

도서관에 책을 등록하는 프로그램 입니다. 기존에 JAVA로 만들어진 모듈을 nodejs로 변경 하였습니다.
JAVA 소스의 경우 selenium을 설치하고 설정해야하는 부분이 많았는데 puppeteer를 이용하면 간단하게 최소한의 설정으로 처리가 가능하다.

프로그램 설계

부천 시립 도서관에서 한달에 요청 할 수 있는 도서는 다음과 같다.

  • 상동, 심곡, 꿈빛, 책마루, 송내도서관 : 1인당 월 5권
  • 원미, 북부, 한울빛, 꿈여울도서관 : 1인당 월 20권

이에 도서 목록을 다음과 같이 TXT 파일로 작성하연 자동으로 등록 하도록 한다.

도서목록 파일 내용 샘플

도서관코드|도서명
AA|즐거운하루
AB|자동책등록프로그램

도서관 코드

2019년 부터 상동, 심곡, 꿈빛, 책마루, 송내, 동화도서관: 1인당 월 5권 으로 변경 되었습니다.

아래 내용은 2017년 기준 내용입니다.

도서관코드 도서관명 비고
AA 상동 월5권
AB 원미 월20권
AC 삼곡 월5권
AD 북부 월20권
AE 꿈빛 월5권
AF 책마루 월5권
AG 한울빛 월20권
AH 꿈여울 월20권
AI 송내 월5권
AK 도당 월20권

프로세스 순서도

프로세스 순서도

Notice

  • nodejs 필요
  • _env 를 .env 로 파일명 변경
  • .env 에 ID/PW 작성

실행 방법

# 모듈 설치
npm install

# 실행
npm run start

License

희망 도서 자동 등록 프로그램은 open source 프로그램으로 MIT 라이선스를 따릅니다.

This Request book apply is free and open source software, distributed under the MIT License. So feel free to use this program on your project without linking back to me or including a disclaimer.

Posted by lahuman

댓글을 달아 주세요

Vim과 Neovim 편집기에서 OS 명령어 실행 취약점 발견 2019.06.13

  • 보안 연구원 Armin Razmjou는 최근 리눅스에서 가장 인기 있는 커맨드라인 텍스트 편집 유틸리티인 Vim과 Neovim에서 심각도 높은 임의 OS 명령 실행 취약점(CVE-2019-12735)을 발견
    • Vim 편집기 : 사용자들이 리눅스에서 텍스트, 스크립트, 문서를 포함한 파일을 생성하고, 열람하거나 수정할 수 있는 프로그램
      • Neovim 편집기 : 플러그인, GUI 등이 개선된 Vim 확장 버전 프로그램
  • 이 취약점은 “modlines”를 처리하는 과정에서 발견됨
    + modelines : 문서의 시작과 마지막 라인 근처에 파일의 제작자가 언급한 커스텀 설정 세트를 자동으로 찾아 적용하는 기능으로 기본으로
                          활성화되어 있음
  • 비록 보안상의 이유로 modelines의 서브셋만을 허용하고 샌드박스 보호를 사용할지라도 “:source!” 명령어를 사용하면 샌드박스를
    우회할 수 있음

  • 따라서, Vim이나 Neovim을 사용해 특별히 제작된 파일을 열람하는 것만으로도 공격자가 피해자의 리눅스 시스템에서 명령을 실행하고
    제어권을 탈취할 수 있음

  • Vim(8.1.1365)과 Neovim(v0.3.6)은 해당 취약점 문제 해결을 위해 최근 업데이트를 발표

  • 해결 방안

    • modelines 기능 비활성화
    • modelines의 수식을 비활성화 하기 위한 “modelineexpr” 비활성화
    • Vim modelines의 대한인 “securemodelines plugin” 사용

시사점

  • 리눅스 및 Vim과 Neovim 에디터를 최신 버전으로 업데이트하고, 주기적인 권한 탈취 여부 확인

vim 확인 하기

vim upgrade 하기

sudo apt-get upgrade vim 명령어를 이용해서 업그레이드를 할 수 있다.

만약 업그레이드를 할 내용이 없으면 다음과 같은 결과가 확이 된다.

$> sudo apt-get upgrade vim
Reading package lists... Done
Building dependency tree
Reading state information... Done
vim is already the newest version (2:8.0.1453-1ubuntu1.1).
Calculating upgrade... Done
The following package was automatically installed and is no longer required:
  linux-aws-headers-4.15.0-1035
Use 'sudo apt autoremove' to remove it.
The following packages have been kept back:
  linux-aws linux-headers-aws linux-image-aws
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

vim 최신 버젼으로 강제 업데이트 하기

PPA를 이용해서 최신 버젼으로 업데이트를 한다.

$> sudo add-apt-repository ppa:jonathonf/vim
$> sudo apt update
$> sudo apt install vim

vim upgrade 내역 확인 하기

changelog를 확인하면 업데이트 기록이 확인 된다. 다음과 같인 로그가 있다면, CVE-2019-12735.patch에 대한 패치가 되어 있는 것이다.

$> apt changelog vim
vim (2:8.0.1453-1ubuntu1.1) bionic-security; urgency=medium

  * SECURITY UPDATE: Arbitrary code execution
    - debian/patches/CVE-2019-12735.patch: disallow
      sourcing a file in the sandbox in src/getchar.c
    - CVE-2019-12735

 -- Leonidas S. Barbosa <leo.barbosa@canonical.com>  Thu, 06 Jun 2019 14:31:41 -0300

대부분 서비스를 확인하니 이미 패치가 되어 있었다.

참고자료

Posted by lahuman

댓글을 달아 주세요

Maven을 이용한 Springboot 프로젝트 repackage 하기

다른 분이 작성한 Springboot 프로젝트를 패키징하게 되었다.

해당 프로젝트는 maven으로 되어 있었기에 큰 문제가 없을꺼라 생각했다.

내 업무 환경은 JDK 12가 설치되어 있었는데, spring-repackage를 하면 다음과 같은 오류가 발생하였다.

ERROR] Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:2.6:jar (default-jar) on project my-test-utils: Execution default-jar of goal org.apache.maven.plugins:maven-jar-plugin:2.6:jar failed: An API incompatibility was encountered while executing org.apache.maven.plugins:maven-jar-plugin:2.6:jar: java.lang.ExceptionInInitializerError: null
[ERROR] -----------------------------------------------------
[ERROR] realm =    plugin>org.apache.maven.plugins:maven-jar-plugin:2.6

에러 발생의 원인은 maven-plugin 버전 문제로, 다음과 같이 pom.xml에 추가 하면 된다.

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.0</version>
        </plugin>
    </plugins>
</build>

추가로 다음과 같은 오류가 발생하면,

[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.5.21.RELEASE:repackage (default-cli) on project lahuman: Execution default-cli of goal org.springframework.boot:spring-boot-maven-plugin:1.5.21.RELEASE:repackage failed: Source file must be provided -> [Help 1]

Maven 배포시 Local Jar 파일과 함께 하기!내용과 같이 spring:repackage에 -U 옵션을 추가하면 해결 된다.

오랜만에 JAVA 보는듯 하다. 요즘은 개인 프로젝트도 그냥 NODE로 개발 하게 된다.

참고자료

Posted by lahuman

댓글을 달아 주세요