MES Code-Scanner
================

Durchsucht C#-, VB.NET- und T-SQL-Quellcode nach Stellen, an denen Werte in
SQL-Text eingesetzt statt als Parameter übergeben werden. Statische Analyse: Es
wird keine Datenbank verbunden und nichts ausgeführt.

*** OFFLINE ***
Quellcode, Zugangsdaten, Passwörter und andere Geheimnisse verlassen diesen
Rechner nicht. Das Programm baut keine Internetverbindung auf, nutzt keinen
KI-Dienst und sendet keine Telemetrie. Nur der Ko-fi-Link öffnet auf Klick den
Browser.

Inhalt
------
MES.CodeScanner.exe   Oberfläche: Ordner wählen oder ins Fenster ziehen, "Prüfen".
codescan.exe                   Kommandozeile für Build und Skripte.
Beispiel-Shop\                Kleines Beispiel mit absichtlich unsicherem Code zum Ausprobieren.

Keine Installation nötig. Windows 10 oder 11, 64 Bit. Die Oberfläche bringt
.NET mit; codescan.exe braucht die .NET-Laufzeit 8 oder neuer (auf Build-Rechnern
mit .NET-SDK vorhanden, sonst: https://dot.net).

Kommandozeile
-------------
  codescan <Ordner oder Datei> [--md bericht.md] [--json bericht.json]
          [--min niedrig|mittel|hoch] [--fail-on niedrig|mittel|hoch]
          [--exclude Muster] [--nur cs|vb|sql] [--ohne-sqli003] [--still]

  Exit-Code: 0 = keine Funde, 1 = Funde ab --fail-on, 2 = Aufruffehler.
  codescan --help zeigt alle Optionen.

Regeln
------
SQLI001  Dynamischer SQL-Text wird ausgeführt
SQLI002  Spalten-, Tabellen- oder Sortiername aus Variable
SQLI003  SQL-Text wird mit Variablen zusammengesetzt (Ausführung nicht erkennbar)
SQLI004  Komplette SQL-Anweisung aus der Eingabe eines Endpunkts
SQLI010  EXEC(@sql) mit zusammengesetztem SQL (T-SQL)
SQLI011  sp_executesql mit eingesetzten Werten (T-SQL)

Schweregrad: hoch = Wert aus einer Eingabe (Parameter einer öffentlichen
Methode, Textfeld, Request); mittel = Herkunft unbekannt (Feld, Rückgabewert,
Einstellung); niedrig = selbst maskiert oder nur Zahlen/QUOTENAME.

Ausnahmen
---------
Geprüfte, unbedenkliche Stellen in der Zeile davor markieren, mit Begründung:

  // codescan:ignore Schema kommt aus der festen Liste in Setup.cs
  -- codescan:ignore nur Wartungsskript, Namen aus sys.tables

codescan:ignore-file nimmt eine ganze Datei aus.

Hinweise
--------
- Keine Software ist fehlerfrei – auch dieses Werkzeug nicht. Es gibt keine
  Gewähr, dass der Scanner alle Schwachstellen findet. Ein Fund ist eine
  *mögliche* Stelle; ein Bericht ohne Funde bedeutet nicht, dass der Code frei
  von SQL-Injection ist. Ersetzt kein Code-Review und keinen Sicherheitstest.
- Nur eigenen Quellcode prüfen oder mit Erlaubnis des Eigentümers.
- Kostenlos, ohne Gewähr. Unterstützen: https://ko-fi.com/derstefan

MES · https://mes.tools/downloads
