Entwickler nutzen zunehmend GraphQL als bevorzugte Methode zum Erstellen von APIs. GraphQL vereinfacht das Abrufen von Daten aus mehreren Quellen und optimiert den Datenzugriff und die Datenaggregation. Durch die Abfrage mehrerer Datenquellen mit einer POST-Anfrage von einem einzigen Endpunkt aus können Entwickler, die GraphQL verwenden, gezielt die Daten anfordern, die sie aus verschiedenen Quellen benötigen. Mit diesem Ansatz lassen sich Einschränkungen in REST-API -Architekturen lösen, bei denen es beispielsweise zu Unterabfragen (Anfragen, denen alle erforderlichen Daten fehlen) oder Überabfragen (Anfragen werden an mehrere Endpunkte gesendet und erfassen zu viele Daten) kommen kann.
GraphQL ist die optimale Wahl für Microservices-Architekturen, da es Clients die Möglichkeit gibt, von jedem Dienst oder jeder Datenquelle nur die wesentlichen Daten abzurufen. Dies fördert eine erhöhte Flexibilität und Agilität, die entscheidende Komponenten für den Erfolg in einer modernen Geschäftsumgebung sind.
Durch den höheren Zugriff und die größere Flexibilität bieten GraphQL-APIs auch eine größere Angriffsfläche, die für böswillige Akteure verlockend ist. Obwohl GraphQL relativ neu ist, weist es immer noch viele der gleichen Schwachstellen auf, die auch in anderen API-Architekturen zu finden sind. Glücklicherweise können Sie GraphQL-APIs vor diesen gängigen Bedrohungen schützen, indem Sie einige Ihrer vorhandenen Infrastrukturen und Tools nutzen.
Dieses Tutorial vermittelt ein Verständnis für die Bereitstellung und Sicherung von GraphQL-APIs. Wir veranschaulichen, wie ein Apollo GraphQL- Server auf einer F5 NGINX Unit mit F5 NGINX Plus als API-Gateway bereitgestellt wird. Darüber hinaus zeigen wir, wie Sie F5 NGINX App Protect WAF am API-Gateway für erweiterte Sicherheit bereitstellen und die F5 NGINX Management Suite verwenden, um Ihr WAF zu konfigurieren und auf potenzielle Bedrohungen zu überwachen. Mit diesem Setup können Sie außerdem NGINX App Protect WAF verwenden, um Angriffe wie SQL-Injection zu erkennen.
Befolgen Sie die Schritte in diesen Abschnitten, um das Tutorial abzuschließen:
Bevor Sie mit diesem Tutorial beginnen können, benötigen Sie Folgendes:
Die NGINX Management Suite integriert mehrere erweiterte Funktionen in eine einheitliche Plattform, um die Konfiguration, Überwachung und Fehlerbehebung von NGINX-Instanzen zu vereinfachen. Darüber hinaus erleichtert es die Verwaltung und Steuerung von APIs, optimiert den Anwendungslastausgleich und verbessert die allgemeine Sicherheit für Unternehmen.
Befolgen Sie diese Schritte, um die NGINX Management Suite zu installieren und zu konfigurieren:
NGINX Unit ist eine effiziente und optimierte Laufzeitanwendung mit leichtem Design und damit die ideale Wahl für Unternehmen, die hohe Leistung ohne Kompromisse bei Geschwindigkeit oder Agilität suchen. Es handelt sich um einen Open-Source-Server, der TLS und Anforderungsrouting verarbeiten und Anwendungscode ausführen kann. Weitere Informationen zu NGINX Unit finden Sie auf der Seite „Hauptfunktionen“ .
In diesem Tutorial verwenden wir Express als Node.js- Webanwendungsframework auf NGINX Unit , das umfangreiche Funktionen zum Erstellen eines Apollo GraphQL-Servers bietet. Zum Zeitpunkt des Schreibens dieses Artikels ist die aktuelle Version Apollo Server 4.
Befolgen Sie diese Schritte, um die NGINX-Einheit bereitzustellen und den Apollo GraphQL-Server zu installieren:
Wählen Sie eine geeignete Umgebung zum Bereitstellen einer NGINX Plus-Instanz aus. In diesem Tutorial verwenden wir eine AWS Ubuntu-Instanz und richten mit NGINX Plus einen API-Gateway-Reverse-Proxy ein. Für zusätzliche Sicherheit stellen wir dann NGINX App Protect WAF vor unserem API-Gateway bereit.
Befolgen Sie diese Anweisungen, um NGINX Plus und NGINX App Protect WAF zu installieren:
load_modules
im Verzeichnis nginx.conf hinzu. lade_Modulmodule/ngx_http_js_module.so;lade_Modulmodule/ngx_stream_js_module.so;
Lademodulmodule/ngx_http_app_protect_module.so;
app_protect_enable ein;
Erstellen Sie eine GraphQL-Richtlinienkonfiguration im Verzeichnis /etc/app_protect/conf. Weitere Informationen zum Erstellen einer NGINX App Protect WAF-Richtlinie finden Sie in den entsprechenden Richtlinien .
Hier ist ein Beispiel für eine GraphQL-Richtlinienkonfiguration:
{ "Name": "graphql_policy",
"Vorlage": {
"Name": "POLICY_TEMPLATE_NGINX_BASE"
},
"Anwendungssprache": "utf-8",
"caseInsensitive": false,
"Durchsetzungsmodus": "blockieren",
"Blockierungseinstellungen": {
"Verstöße": [
{
"Name": "VIOL_GRAPHQL_FORMAT",
"Alarm": wahr,
"Block": falsch
},
{
"Name": "VIOL_GRAPHQL_MALFORMED",
"Alarm": wahr,
"Block": falsch
},
{
"Name": "VIOL_GRAPHQL_INTROSPECTION_QUERY",
"Alarm": wahr,
"Block": falsch
},
{
"Name": "VIOL_GRAPHQL_ERROR_RESPONSE",
„Alarm“: wahr,
„Block“: falsch
}
]
}
Um GraphQL-Einstellungen durchzusetzen, aktualisieren Sie das Feld app_protect_policy_file
mit dem GraphQL-Richtliniennamen in der Datei nginx.conf . Nachdem Sie die Datei aktualisiert haben, führen Sie einen NGINX-Neuladevorgang durch, um die GraphQL-Einstellungen durchzusetzen.
Hier ist ein Beispiel der Datei nginx.conf , die eine NGINX App Protect-Richtlinie enthält:
Benutzer nginx; Arbeitsprozesse 4;
Lademodulmodule/ngx_http_js_module.so;
Lademodulmodule/ngx_stream_js_module.so;
Lademodulmodule/ngx_http_app_protect_module.so;
Fehlerprotokoll /var/log/nginx/error.log debug;
Ereignisse {
Arbeitsverbindungen 65536;
}
http {
include /etc/nginx/mime.types;
Standardtyp Anwendung/Oktett-Stream;
Sendedatei ein;
Keepalive_Timeout 65;
Server {
hören <Port>;
Servername <Name>;
app_protect_enable ein;
app_protect_security_log_enable ein; # Dieser Abschnitt aktiviert die Protokollierungsfunktion
app_protect_security_log "/etc/app_protect/conf/log_sm.json" syslog:server=127.0.0.1:514; # Hier wird der Remote-Logger definiert hinsichtlich: Protokollierungsoptionen (definiert in der referenzierten Datei), IP des Protokollservers, Port des Protokollservers
app_protect_security_log "/etc/app_protect/conf/log_default.json" /var/log/app_protect/security.log;
proxy_http_version 1.1;
Standort / {
client_max_body_size 0;
Standardtyp Text/HTML;
proxy_pass http://<IP-Adresse>:<Port>$request_uri;#<IP-Adresse> der Nginx-Einheit
}
Standort /graphql {
client_max_body_size 0;
Standardtyp Text/HTML;
app_protect_policy_file "/etc/app_protect/conf/graphql_policy.json";
Proxy-Passwort http://<IP-Adresse>:<Port>$$Request_URI; #<IP-Adresse> der Nginx-Einheit
} } }
$ nginx -s neu laden
Jetzt können Sie Ihre Konfiguration testen, indem Sie die folgenden Schritte ausführen:
$ curl -X PUT --data-binary @demo.json --unix-socket /var/run/control.unit.sock http://localhost/config
{ "Erfolg": "Neukonfiguration abgeschlossen."
}
$ curl -X POST http://3.X.X.X:4003/graphql/ -H "Content-Type:application/json" -d '{"query": "query {hallo ODER 1=1;} "}'
<html><head><title>Anfrage abgelehnt</title></head><body>Die angeforderte URL wurde abgelehnt. Bitte wenden Sie sich an Ihren Administrator.<br><br>Ihre Support-ID lautet: 7313092578494613509<br><br><ahref='javascript:history.back();'>[Zurück]</a></body><html>
attack_type="Nicht-Browser-Client, Missbrauch von Funktionen, SQL-Injection, Andere Anwendungsaktivität, HTTP-Parser-Angriff",blocking_exception_reason="N/A",date_time="2023-07-05 21:22:38",dest_port="4003",ip_client="99.187.244.63",is_truncated="false",method="POST",policy_name="graphql_policy",protocol="HTTP",request_status="blocked",response_code="0",severity="Critical",sig_cves="N/A,N/A",sig_ids="200002147,200002476",sig_names="SQL-INJ-Ausdrücke wie ""or 1=1"" (3),SQL-INJ-Ausdrücke wie ""or 1=1"" (6) (Parameter)",sig_set_names="{SQL Injection Signatures},{SQL Injection Signatures}",src_port="64257",sub_violations="HTTP-Protokollkonformität fehlgeschlagen: Host-Header enthält IP-Adresse", support_id="7313092578494613509 ",
In diesem Tutorial haben Sie gelernt, wie Sie einen Apollo GraphQL-Server auf NGINX Unit einrichten, NGINX Plus als API-Gateway bereitstellen und Ihre GraphQL-APIs mit NGINX App Protect WAF vor Ihrem API-Gateway sichern.
Sie können auch die Sicherheitsüberwachung der NGINX Management Suite verwenden, um gängige erweiterte Bedrohungen zu identifizieren und zu blockieren, bevor sie Ihre GraphQL-APIs gefährden. Diese einfache Architektur schützt GraphQL-APIs vor einigen der häufigsten API-Schwachstellen, darunter fehlende Authentifizierung und Autorisierung, Injection-Angriffe, uneingeschränkter Ressourcenverbrauch und mehr.
Testen Sie NGINX noch heute mit einer 30-tägigen kostenlosen Testversion des API Connectivity Stack , der NGINX Plus, NGINX App Protect und NGINX Management Suite umfasst.
„Dieser Blogbeitrag kann auf Produkte verweisen, die nicht mehr verfügbar und/oder nicht mehr unterstützt werden. Die aktuellsten Informationen zu verfügbaren F5 NGINX-Produkten und -Lösungen finden Sie in unserer NGINX-Produktfamilie . NGINX ist jetzt Teil von F5. Alle vorherigen NGINX.com-Links werden auf ähnliche NGINX-Inhalte auf F5.com umgeleitet."