Skip to content

Instantly share code, notes, and snippets.

@aladagemre
Created September 8, 2025 22:04
Show Gist options
  • Save aladagemre/4eb4aff4b83298bc3312da134064e9d2 to your computer and use it in GitHub Desktop.
Save aladagemre/4eb4aff4b83298bc3312da134064e9d2 to your computer and use it in GitHub Desktop.
paket-kontrol.sh
#!/bin/bash
# Compromised NPM Packages Checker
# Bu script compromised npm paketlerini projelerinizde arar ve rapor oluşturur
# Compromised paketler listesi
COMPROMISED_PACKAGES=(
"ansi-styles"
"debug"
"backslash"
"chalk-template"
"supports-hyperlinks"
"has-ansi"
"simple-swizzle"
"color-string"
"error-ex"
"color-name"
"is-arrayish"
"slice-ansi"
"color-convert"
"wrap-ansi"
"ansi-regex"
"supports-color"
"strip-ansi"
"chalk"
)
# Renk kodları
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Fonksiyonlar
print_header() {
echo -e "${BLUE}=================================${NC}"
echo -e "${BLUE} COMPROMISED PACKAGES CHECKER ${NC}"
echo -e "${BLUE}=================================${NC}"
echo ""
}
print_package_list() {
echo -e "${YELLOW}Aranan compromised paketler:${NC}"
for pkg in "${COMPROMISED_PACKAGES[@]}"; do
echo " - $pkg"
done
echo ""
}
check_project() {
local project_dir="$1"
local project_name=$(basename "$project_dir")
local found_packages=()
# Package-lock.json var mı kontrol et
local lock_file="$project_dir/package-lock.json"
local lock_date="bilinmiyor"
if [ -f "$lock_file" ]; then
lock_date=$(stat -f "%Sm" "$lock_file" 2>/dev/null || echo "bilinmiyor")
fi
# Her paketi kontrol et
for pkg in "${COMPROMISED_PACKAGES[@]}"; do
if [ -d "$project_dir/node_modules/$pkg" ]; then
local version="bilinmiyor"
if [ -f "$project_dir/node_modules/$pkg/package.json" ]; then
version=$(grep '"version"' "$project_dir/node_modules/$pkg/package.json" | head -1 | sed 's/.*": "//;s/".*//')
fi
found_packages+=("$pkg:$version")
fi
done
# Bulunan paketler varsa rapor et
if [ ${#found_packages[@]} -gt 0 ]; then
echo -e "${RED}PROJE: $project_name${NC}"
echo -e "${BLUE}Yol: $project_dir${NC}"
echo -e "${GREEN}Son güncelleme: $lock_date${NC}"
echo -e "${YELLOW}Bulunan compromised paketler:${NC}"
for pkg_info in "${found_packages[@]}"; do
local pkg_name=$(echo "$pkg_info" | cut -d: -f1)
local pkg_version=$(echo "$pkg_info" | cut -d: -f2)
echo " ✗ $pkg_name (v$pkg_version)"
done
echo ""
return 1 # Compromised paket bulundu
fi
return 0 # Temiz proje
}
# Ana fonksiyon
main() {
local search_dir="${1:-$(pwd)}"
local total_projects=0
local compromised_projects=0
print_header
print_package_list
echo -e "${BLUE}Arama dizini: $search_dir${NC}"
echo ""
# Package.json dosyalarını bul (node_modules hariç)
local package_files
mapfile -t package_files < <(find "$search_dir" -maxdepth 4 -name "package.json" -not -path "*/node_modules/*" -not -path "*/.next/*" 2>/dev/null)
echo -e "${YELLOW}Bulunan proje sayısı: ${#package_files[@]}${NC}"
echo ""
# Her projeyi kontrol et
for package_file in "${package_files[@]}"; do
if [ -f "$package_file" ]; then
local project_dir=$(dirname "$package_file")
# Sadece node_modules klasörü olan projeleri kontrol et
if [ -d "$project_dir/node_modules" ]; then
((total_projects++))
if ! check_project "$project_dir"; then
((compromised_projects++))
fi
fi
fi
done
# Özet rapor
echo -e "${BLUE}=================================${NC}"
echo -e "${BLUE} ÖZET RAPOR ${NC}"
echo -e "${BLUE}=================================${NC}"
echo -e "${GREEN}Kontrol edilen toplam proje: $total_projects${NC}"
echo -e "${RED}Compromised paket bulunan proje: $compromised_projects${NC}"
if [ $compromised_projects -eq 0 ]; then
echo -e "${GREEN}✓ Hiçbir projede compromised paket bulunamadı!${NC}"
else
echo -e "${YELLOW}⚠ $compromised_projects proje güncelleme gerektirebilir${NC}"
fi
echo ""
echo -e "${YELLOW}Not: Bu paketler çoğu Node.js projesinde dolaylı bağımlılık olarak bulunur.${NC}"
echo -e "${YELLOW}Güncellemeler için: npm audit fix veya npm update komutlarını kullanabilirsiniz.${NC}"
}
# Script çalıştırılışı
if [ "${BASH_SOURCE[0]}" == "${0}" ]; then
main "$@"
fi%
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment