Initial commit from template
This commit is contained in:
89
.claude/skills/semgrep-security/scan.sh
Executable file
89
.claude/skills/semgrep-security/scan.sh
Executable file
@@ -0,0 +1,89 @@
|
||||
#!/bin/bash
|
||||
# Fuehrt Semgrep Security Scan durch
|
||||
|
||||
set -e
|
||||
|
||||
# Farben fuer Output
|
||||
RED='\033[0;31m'
|
||||
YELLOW='\033[1;33m'
|
||||
GREEN='\033[0;32m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Pruefen ob Semgrep installiert ist
|
||||
if ! command -v semgrep &> /dev/null; then
|
||||
echo -e "${YELLOW}Semgrep nicht gefunden. Installiere...${NC}"
|
||||
bash "$(dirname "$0")/install-semgrep.sh"
|
||||
fi
|
||||
|
||||
# Argumente: spezifische Dateien oder alles scannen
|
||||
if [ $# -gt 0 ]; then
|
||||
SCAN_TARGET="$@"
|
||||
echo "Scanne spezifische Dateien: $SCAN_TARGET"
|
||||
else
|
||||
SCAN_TARGET="."
|
||||
echo "Scanne gesamtes Projekt..."
|
||||
fi
|
||||
|
||||
# Temporaere Datei fuer JSON Output
|
||||
RESULT_FILE=$(mktemp)
|
||||
|
||||
# Scan durchfuehren
|
||||
echo ""
|
||||
echo "Starte Security Scan..."
|
||||
echo "========================"
|
||||
|
||||
semgrep \
|
||||
--config=auto \
|
||||
--config=p/security-audit \
|
||||
--config=p/typescript \
|
||||
--json \
|
||||
--output="$RESULT_FILE" \
|
||||
$SCAN_TARGET 2>/dev/null || true
|
||||
|
||||
# Ergebnisse parsen
|
||||
if [ -f "$RESULT_FILE" ]; then
|
||||
# Anzahl der Findings zaehlen
|
||||
TOTAL=$(jq '.results | length' "$RESULT_FILE" 2>/dev/null || echo "0")
|
||||
ERRORS=$(jq '[.results[] | select(.extra.severity == "ERROR")] | length' "$RESULT_FILE" 2>/dev/null || echo "0")
|
||||
WARNINGS=$(jq '[.results[] | select(.extra.severity == "WARNING")] | length' "$RESULT_FILE" 2>/dev/null || echo "0")
|
||||
INFO=$(jq '[.results[] | select(.extra.severity == "INFO")] | length' "$RESULT_FILE" 2>/dev/null || echo "0")
|
||||
|
||||
echo ""
|
||||
echo "========================"
|
||||
echo "Scan Ergebnisse"
|
||||
echo "========================"
|
||||
echo ""
|
||||
|
||||
if [ "$TOTAL" -eq 0 ]; then
|
||||
echo -e "${GREEN}Keine Sicherheitsprobleme gefunden!${NC}"
|
||||
else
|
||||
echo -e "Gefunden: ${RED}$ERRORS Critical/High${NC}, ${YELLOW}$WARNINGS Medium${NC}, $INFO Low"
|
||||
echo ""
|
||||
|
||||
# Details ausgeben
|
||||
echo "Details:"
|
||||
echo "--------"
|
||||
jq -r '.results[] | "[\(.extra.severity)] \(.check_id)\n File: \(.path):\(.start.line)\n Message: \(.extra.message)\n"' "$RESULT_FILE" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# Score berechnen
|
||||
SCORE=$((100 - (ERRORS * 10) - (WARNINGS * 3) - (INFO * 1)))
|
||||
if [ $SCORE -lt 0 ]; then SCORE=0; fi
|
||||
|
||||
echo ""
|
||||
echo "========================"
|
||||
echo -e "Security Score: ${GREEN}$SCORE/100${NC}"
|
||||
echo "========================"
|
||||
|
||||
# Cleanup
|
||||
rm -f "$RESULT_FILE"
|
||||
|
||||
# Exit mit Fehler wenn kritische Issues
|
||||
if [ "$ERRORS" -gt 0 ]; then
|
||||
echo ""
|
||||
echo -e "${RED}WARNUNG: Es wurden kritische Sicherheitsprobleme gefunden!${NC}"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo -e "${GREEN}Scan abgeschlossen - keine Ergebnisdatei erstellt${NC}"
|
||||
fi
|
||||
Reference in New Issue
Block a user