관리되지 않는 모든 JAR 파일 스캔

Snyk CLI는 Java 애플리케이션에서 관리되지 않은 JAR 파일을 스캔하여 어떤 오픈 소스 패키지를 포함하고 있는지 식별합니다.

CLI는 패키지 이름, 버전 및 취약점을 식별하는데, 이는 패키지가 Maven Central에서 사용 가능하고 JAR 파일 해시가 Maven Central의 해시와 일치하는 경우에만 이루어집니다.

전제 조건: 관리되지 않은 JAR 파일을 스캔하려면 지원되는 버전의 Maven을 설치해야 합니다.

단일 폴더의 모든 JAR 파일 스캔 및 각 JAR 파일 개별적으로 스캔

개별적으로 각 JAR 파일을 스캔하려면 다음 명령을 사용합니다:

snyk test --scan-unmanaged --file=/path/to/file

각 JAR 파일을 개별적으로 테스트할 때, 스캔된 JAR 파일의 이름이 Snyk 웹 UI에 나타납니다.

WAR 파일 지원: Maven Central에 게시된 개별 WAR 파일들을 스캔할 수 있습니다. 오픈 소스 종속성 JAR를 직접 스캔하려면 다른 WAR 파일이나 기타 JAR 파일을 포함하는 모든 다른 WAR 파일을 추출(압축 해제)해야 합니다.

모든 하위 폴더들을 재귀적으로 스캔

Java 앱은 종종 애플리케이션 내 다양한 폴더에 JAR 파일을 보유합니다.

다음은 현재 폴더부터 시작하여 모든 하위 폴더를 재귀적으로 거치면서 발견된 각 JAR 파일을 테스트하는 Snyk CLI 버전 1.1176.0 이전에 사용된 Linux/Mac Bash 스크립트입니다.

REMOTE_REPO_URL 변수에 값을 설정하는 것이 중요하며, 이는 --remote-repo-url 매개변수를 사용하여 UI에서 단일 Snyk 프로젝트 아래 모든 스캔 결과를 결합하는 데 사용됩니다.

#!/bin/bash

SNYK_CLI_BINARY_NAME=snyk-cli
SNYK_CLI_BINARY_LOCATION=https://github.com/snyk/cli/releases/latest/download/
REMOTE_REPO_URL= #UI에서 원하는 프로젝트명 입력

detected_jars=""
undetected_jars=""
detected_count=0
undetected_count=0

[[ -z "$REMOTE_REPO_URL" ]] && { echo "REMOTE_REPO_URL가 비어 있습니다. REMOTE_REPO_URL(6행)을 입력하고 스크립트를 다시 실행하십시오." ; exit 1; }

#OS에 특화된 Snyk 바이너리 다운로드 (MacOS 또는 Linux)
case "$(uname -s)" in
   Darwin)
     curl -L -O $SNYK_CLI_BINARY_LOCATION/snyk-macos
     mv snyk-macos snyk-cli
     ;;
   Linux)
     curl -L -O $SNYK_CLI_BINARY_LOCATION/snyk-linux
     mv snyk-linux snyk-cli
     ;;
esac

chmod +x $SNYK_CLI_BINARY_NAME

#모든 .jar 파일을 재귀적으로 찾아 루프 실행
#주의: 이름에 공백이 있는 파일이나 폴더에서 오류 발생 가능
for file in $(find . -type f -name '*.jar' | uniq)
do
echo ""
echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-="    
echo $file
echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=" 

#각 .jar에 대해 Snyk 모니터 실행
if (./$SNYK_CLI_BINARY_NAME monitor --scan-unmanaged --file=$file --project-name=$file --remote-repo-url=$REMOTE_REPO_URL) then
  detected_jars+=$file'\n'
  let detected_count++
else
  undetected_jars+=$file'\n'
  let undetected_count++
fi

done

#콘솔에 메트릭 출력
echo ""
echo ""
echo ""
echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=" 
echo "찾은 JAR 파일 ($detected_count) - 전달된 종속성은 포함되지 않음:"
echo ""
if [ ${detected_count} -gt 0 ]; then
   printf "${detected_jars}"
fi
echo ""
echo ""
echo ""
echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=" 
echo "찾지 못한 JAR 파일 ($undetected_count) - Maven Central에 없음:"
echo ""
if [ ${undetected_count} -gt 0 ]; then
   printf "${undetected_jars}"
fi

다음은 모든 하위 폴더의 JAR를 스캔하는 Windows 배치 스크립트입니다. scanjar.bat 파일에서 실행합니다.

이 스크립트를 사용하려면 Snyk CLI를 설치해야 합니다.

REM 사용법:
REM 예: scanjar.bat "C:\workspace\app" "myapp"
SET WORKSPACE=%1
SET REMOTE_REPO_URL=%2
for /R %WORKSPACE% %%f in (*.jar) do cmd /c snyk monitor --scan-unmanaged --remote-repo-url=%REMOTE_REPO_URL% --file=%%f --project-name=%%f

"REMOTE_REPO_URL"이 "econnect"으로 설정된 스크립트를 사용한 후 Snyk UI에 표시된 결과의 예는 다음과 같습니다.

관리되지 않은 JAR 파일 스캔 결과
관리되지 않은 JAR 파일 스캔 결과

Last updated