Das API Key Wildcard Plugin stellt einen separaten API-Endpoint (/api/wildcard/tickets.json) bereit, der API-Keys mit der IP-Adresse 0.0.0.0 erlaubt, Anfragen von jeder IP-Adresse zu akzeptieren.
Ohne dieses Plugin: osTickets native API erfordert eine feste IP-Adresse pro API-Key. Bei dynamischen IPs (Home-Office, CI/CD, wechselnde Standorte) muss der Key ständig manuell angepasst werden.
Mit diesem Plugin: Ein separater Wildcard-Endpoint erlaubt API-Keys mit IP
0.0.0.0, Anfragen von beliebigen IPs zu akzeptieren. Der Standard-Endpoint bleibt unverändert und sicher.
Wildcard-API-Keys (
0.0.0.0) sind nur für Entwicklungsumgebungen gedacht! In Produktivumgebungen sollten API-Keys immer an spezifische IP-Adressen gebunden sein.
| Anforderung | Version | Hinweise |
|---|---|---|
| osTicket | 1.18.x | Plugin nutzt osTickets native API-Infrastruktur |
| PHP | 7.4+ | Empfohlen: PHP 8.1+ für beste Performance |
| Webserver | Apache oder NGINX | Apache benötigt mod_rewrite aktiviert |
| Dateiberechtigungen | Schreibzugriff auf /api/ |
Erforderlich für automatische Installation |
Keine externen Abhängigkeiten. Kein Composer nötig.
api-key-wildcard-Ordner nach /include/plugins/ auf deinem osTicket-Server hochFinaler Pfad: /pfad/zu/osticket/include/plugins/api-key-wildcard/
cd /pfad/zu/osticket/include/plugins
git clone https://github.com/markus-michalski/osticket-api-key-wildcard.git api-key-wildcard
Was automatisch passiert:
wildcard.phpwird ins/api/-Verzeichnis kopiert (chmod 0755)/api/.htaccesserhältOptions -MultiViewsund Wildcard-Rewrite-Rule- Installationsdetails werden ins Error-Log geschrieben
- Installierte Version wird in der Plugin-Konfiguration gespeichert
0.0.0.0Der API-Key MUSS die IP
0.0.0.0haben, um mit dem Wildcard-Endpoint zu funktionieren!
Falls die automatische Installation fehlschlägt (z.B. wegen Dateiberechtigungen):
Wildcard-Endpoint kopieren:
cp /pfad/zu/osticket/include/plugins/api-key-wildcard/wildcard.php \
/pfad/zu/osticket/api/wildcard.php
chmod 755 /pfad/zu/osticket/api/wildcard.php
/api/.htaccess aktualisieren - Folgende Zeilen nach RewriteEngine On einfügen:
# Disable MultiViews for wildcard endpoint (prevents mod_negotiation)
Options -MultiViews
# Wildcard API endpoint (must come BEFORE the default rule)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^wildcard/(.*)$ wildcard.php/$1 [L]
Falls du NGINX verwendest, füge dies manuell zu deinem Server-Block hinzu:
# osTicket API Key Wildcard Plugin
location ~ ^/api/wildcard/ {
rewrite ^/api/wildcard/(.*)$ /api/wildcard.php/$1 last;
}
# Pass PHP requests to PHP-FPM
location ~ ^/api/wildcard\.php {
fastcgi_split_path_info ^(/api/wildcard\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php-fpm.sock;
}
sudo nginx -t
sudo systemctl reload nginx
Das Plugin bietet zwei Einstellungen im Admin Panel (Plugins -> API Key Wildcard -> Konfiguration):
| Einstellung | Beschreibung | Standard | Wann nutzen |
|---|---|---|---|
| Installierte Version | Zeigt die aktuell installierte Plugin-Version (readonly) | Automatisch | Zur Kontrolle, ob Auto-Update funktioniert hat |
| Wildcard-Zugriffe loggen | Protokolliert jeden Wildcard-API-Zugriff im Debug-Log | Aktiviert | Deaktivieren bei hohem API-Volumen um Log-Spam zu vermeiden |
Wenn "Wildcard-Zugriffe loggen" aktiviert ist, wird bei jedem erfolgreichen Wildcard-Zugriff ein Debug-Eintrag mit der Remote-IP ins osTicket System-Log geschrieben. Die IP wird dabei XSS-geschützt (
Format::htmlchars(Format::sanitize())).
| Feature | Standard-API | Wildcard-API |
|---|---|---|
| Endpoint | /api/tickets.json |
/api/wildcard/tickets.json |
| IP-Beschränkung | Spezifische IP erforderlich | Jede IP (wenn API-Key IP = 0.0.0.0) |
| Sicherheit | Hoch (produktionsbereit) | Niedrig (nur Entwicklung) |
| Anwendungsfall | Produktion | Entwicklung/Tests |
curl -X POST \
-H "X-API-Key: DEIN_API_KEY_HIER" \
-H "Content-Type: application/json" \
-d '{
"name": "Test User",
"email": "test@example.com",
"subject": "Test Ticket via Wildcard",
"message": "Das ist eine Testnachricht über den Wildcard-Endpoint"
}' \
http://localhost/osTicket/api/wildcard/tickets.json
Verwende
/api/wildcard/tickets.json(NICHT/api/tickets.json). Der Standard-Endpoint funktioniert weiterhin normal mit IP-gebundenen Keys.
| Standard-Endpoint | Wildcard-Endpoint |
|---|---|
/api/tickets.json |
/api/wildcard/tickets.json |
/api/tickets.xml |
/api/wildcard/tickets.xml |
/api/tickets.email |
/api/wildcard/tickets.email |
Funktioniert auch mit erweiterten API-Endpoints von anderen Plugins (z.B. API Endpoints Plugin)!
Das Plugin verwendet osTickets Signal-System nicht direkt, sondern überschreibt die API-Controller-Logik:
| Mechanismus | Klasse | Zweck |
|---|---|---|
enable() Hook |
ApiKeyWildcardPlugin |
Installiert Endpoint-Datei und .htaccess-Regeln |
disable() Hook |
ApiKeyWildcardPlugin |
Entfernt Endpoint-Datei und .htaccess-Änderungen |
bootstrap() Hook |
ApiKeyWildcardPlugin |
Prüft auf Version-Mismatch und triggert Auto-Update |
requireApiKey() Override |
WildcardApiController |
Modifizierte API-Key-Validierung mit 0.0.0.0-Support |
Symptome:
/api/wildcard/tickets.json gibt 404 zurückwildcard.php im /api/-VerzeichnisPrüfung:
ls /pfad/zu/osticket/api/wildcard.phptail -f /var/log/apache2/error.log/api/ habenLösung: Manuelle Installation verwenden (siehe Installationsabschnitt oben)
Symptome:
Prüfung:
0.0.0.0 sein/api/wildcard/tickets.json (nicht /api/tickets.json)X-API-Key: DEIN_KEY muss im Request seinLösung:
# Korrekte Anfrage:
curl -X POST \
-H "X-API-Key: DEIN_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Test","email":"test@test.com","subject":"Test","message":"Test"}' \
http://localhost/osTicket/api/wildcard/tickets.json
Symptome:
/api/wildcard/tickets.json gibt 404 zurück.htaccessPrüfung:
ls -la /pfad/zu/osticket/api/wildcard.php
grep wildcard /pfad/zu/osticket/api/.htaccess
apache2ctl -M | grep rewrite
grep MultiViews /pfad/zu/osticket/api/.htaccess
Lösung: Plugin deaktivieren/aktivieren um Installation neu auszulösen, oder manuell installieren.
Symptome:
wildcard.php in /api/ ist noch alte VersionLösung:
sudo systemctl reload php8.1-fpm # PHP-FPM
sudo systemctl reload apache2 # Apache mod_php
enable() neu)Ab v2.0 erkennt das Plugin Version-Mismatches automatisch beim Bootstrap und führt ein Auto-Update durch.
api-key-wildcard/
├── plugin.php # Plugin-Registrierung (ID, Version, Autor)
├── class.ApiKeyWildcard.php # Haupt-Plugin-Klasse + Config
├── class.PluginConstants.php # Alle Magic-Strings zentralisiert
├── class.PluginInstaller.php # Dateioperationen (install/uninstall)
├── class.HtaccessManager.php # .htaccess-Manipulation
├── api.wildcard.inc.php # WildcardApiController (Kern-Logik)
├── wildcard.php # API-Endpoint (wird nach /api/ kopiert)
├── .htaccess # Referenz-htaccess mit Wildcard-Regeln
├── CHANGELOG.md # Versionshistorie
├── LICENSE # GPL v2
└── README.md # Dokumentation
Standard-API (/api/tickets.json):
// Prüft IP-Adresse gegen API-Key-Konfiguration
WHERE apikey = ? AND ipaddr = ? -- Client-IP muss exakt matchen
Wildcard-API (/api/wildcard/tickets.json):
// Erweiterte Prüfung: IP-Match ODER Wildcard-IP
WHERE apikey = ? AND (ipaddr = ? OR ipaddr = '0.0.0.0')
Die Remote-IP wird im Access-Log mit
Format::htmlchars(Format::sanitize())gegen XSS-Angriffe geschützt - selbst bei manipulierten X-Forwarded-For-Headern.
Ab v2.0 verfolgt das Plugin seine installierte Version über die Plugin-Konfiguration (nicht mehr über .htaccess-Kommentare):
bootstrap(): Installierte Version aus Config lesenplugin.php-Version vergleichenperformUpdate() aufrufenSeparate API-Keys verwenden:
| Umgebung | IP | Endpoint | Bemerkung |
|---|---|---|---|
| Produktion | 203.0.113.42 |
/api/tickets.json |
Spezifische IP, Standard-Endpoint |
| Staging | 0.0.0.0 |
/api/wildcard/tickets.json |
Nur wenn hinter Firewall |
| Entwicklung | 0.0.0.0 |
/api/wildcard/tickets.json |
Pro Entwickler eigener Key |
Vor dem Deployment in Produktion: Plugin deaktivieren (Admin Panel -> Plugins -> API Key Wildcard -> Deaktivieren). Alle Wildcard-Dateien und .htaccess-Änderungen werden automatisch entfernt.
F: Modifiziert dieses Plugin osTicket-Core-Dateien?
A: Nein. Das Plugin erstellt einen separaten Endpoint und modifiziert keine Core-Dateien. Standard-API bleibt unverändert.
F: Kann ich beide Endpoints gleichzeitig verwenden?
A: Ja. Standard-API für Produktiv-Integrationen (strikte IP), Wildcard-API für Entwicklung (flexible IP).
F: Was passiert beim Deaktivieren?
A: Das Plugin entfernt sauber alle installierten Dateien (/api/wildcard.php) und alle .htaccess-Änderungen. Kein manuelles Aufräumen nötig.
F: Welche PHP-Versionen werden unterstützt?
A: PHP 7.4, 8.0, 8.1, 8.2 und 8.3 (getestet in CI).
F: Funktioniert das mit NGINX?
A: Ja, aber benötigt manuelle Konfiguration (siehe Installationsabschnitt). Apache-Setup ist automatisch.
F: Kompatibel mit dem API Endpoints Plugin?
A: Ja, alle erweiterten API-Endpoints funktionieren auch über den Wildcard-Endpoint.
F: Ist das sicher für Produktion?
A: Nein. Wildcard-API-Keys (0.0.0.0) nur in Entwicklungs-/Testumgebungen verwenden.
F: Was passiert, wenn mein Wildcard-API-Key geleakt wird?
A: Jeder mit dem Key kann von überall Tickets erstellen. Sofort: API-Key im Admin Panel deaktivieren, neuen Key erstellen, Logs auf verdächtige Aktivitäten prüfen.
GNU General Public License v2, kompatibel mit osTicket Core.
Siehe LICENSE.
Issue Tracker: https://github.com/markus-michalski/osticket-api-key-wildcard/issues
Beim Melden von Problemen bitte angeben:
php -v)Siehe CHANGELOG.md für die vollständige Versionshistorie.