Zusätzlich zu den oben beschriebenen Methoden können Sie mit Net.Data-Konfigurationsvariablen oder Makro-Entwicklungsverfahren die Aktivitäten von Endbenutzern begrenzen, um firmeninterne Informationen wie den Aufbau Ihrer Datenbank zu verdecken und um vom Benutzer gestellte Eingabewerte in Produktionsumgebungen zu überprüfen.
Net.Data stellt mehrere Konfigurationsvariablen zur Verfügung, mit denen Sie die Aktivitäten von Endbenutzern begrenzen oder den Aufbau Ihrer Datenbank verdecken können.
Sie sollten zudem Berechtigungsprüfungen verwenden (siehe Verwenden der Berechtigung) und sicherstellen, dass Dateinamen in INCLUDE-Anweisungen nicht geändert werden können (siehe Makro-Entwicklungsverfahren).
Sie können die Anzeige von SQL-Anweisungen in Produktionsumgebungen mit einer der folgenden Methoden inaktivieren:
Informationen zur Syntax und Beispiele für die Net.Data-Variable SHOWSQL finden Sie unter SHOWSQL im Kapitel über Variablen des Handbuchs Net.Data Reference.
Überlegen Sie sorgfältig, ob Sie die Verwendung von Direktanforderungen zulassen wollen, denn dadurch sind Ihre Benutzer eventuell in der Lage, sehr viele Funktionen auszuführen. Wenn Sie diese Aufrufmethode aktivieren, stellen Sie sicher, dass der Benutzer-ID, unter der die Net.Data-Anforderung verarbeitet wird, die entsprechende Berechtigungsstufe erteilt wurde.
Direktanforderungen können mit der Konfigurationsvariablen DTW_DIRECT_REQUEST inaktiviert werden. Informationen zur Syntax und andere nützliche Informationen finden Sie in DTW_DIRECT_REQUEST: Variable zum Aktivieren der Direktanforderung.
Gehen Sie wie folgt vor, um die Verschlüsselung zu aktivieren, damit z. B. ein Kennwort mit unverschlüsseltem Text durch ein verschlüsseltes Kennwort ersetzt wird:
Gehen Sie wie folgt vor, um die Verschlüsselung zu inaktivieren:
Net.Data stellt mehrere Mechanismen bereit, mit denen Benutzer Eingabevariablen Werte zuordnen können. Sie können sicherstellen, dass Makros auf die gewünschte Art ausgeführt werden, indem Sie diese Eingabevariablen durch das Makro prüfen lassen. Ihre Datenbank und Anwendung sollten zudem so entworfen werden, dass der Zugriff von Benutzern auf Daten, zu deren Anzeige sie berechtigt sind, begrenzt ist.
Verwenden Sie beim Schreiben Ihrer Net.Data-Makros folgende Entwicklungsverfahren. Diese Verfahren tragen dazu bei, dass Ihre Anwendungen wie gewünscht ausgeführt werden und dass der Datenzugriff auf Benutzer mit entsprechender Berechtigung begrenzt ist.
Beispiel: Verwenden Sie nicht den folgenden Befehl:
%define START_ROW_NUM = "1"
Verwenden Sie stattdessen diesen Befehl:
@DTW_ASSIGN(START_ROW_NUM, "1")
Das Zuordnen der Variable auf diese Weise verhindert, dass eine Zuweisung einer Abfragezeichenfolge, wie z. B. "START_ROW_NUM=10", Ihre Makro-Einstellung überschreibt.
Durch das Hinzufügen einer Net.Data-Variablen zu einer SQL-Anweisung in einem Makro können Benutzer die SQL-Anweisung vor ihrer Ausführung dynamisch ändern. Der Makroautor ist dafür verantwortlich, die vom Benutzer gestellten Eingabewerte zu prüfen und sicherzustellen, dass eine SQL-Anweisung mit einem Variablenverweis nicht auf unerwartete Weise geändert wird. Ihre Net.Data-Anwendung sollte vom Benutzer gestellte Eingabewerte in der URL-Adresse prüfen, so dass die Net.Data-Anwendung ungültige Eingaben zurückweisen kann. Beim Entwerfen einer Gültigkeitsprüfung sollten Sie die folgenden Schritte ausführen:
Beispiel 1: Verwenden der Zeichenfolgefunktion DTW_POS() zum Prüfen von SQL-Anweisungen
%FUNCTION(DTW_SQL) query1() { select * from shopper where shlogid = '$(shlogid)' %}
Der Wert der Variable shlogid soll eine Käufer-ID (shopper) sein. Durch diese Variable soll die Anzahl der Zeilen, die durch die Anweisung SELECT zurückgegeben wird, auf die Zeilen begrenzt werden, die Informationen zum durch die Käufer-ID angegebenen Käufer enthalten. Wenn jedoch die Zeichenfolge "smith' or shlogid<>'smith" als Wert der Variable shlogid übergeben wird, sieht die Abfrage wie folgt aus:
select * from shopper where shlogid = 'smith' or shlogid<>'smith'
Diese vom Benutzer geänderte Version der ursprünglichen SQL-Anweisung SELECT gibt die gesamte Käufertabelle zurück.
Mit den Net.Data-Zeichenfolgefunktionen können Sie sicherstellen, dass die SQL-Anweisung nicht auf unerwünschte Weise durch den Benutzer geändert wird. Sie können z. B. mit der folgenden Logik sicherstellen, dass keine einfachen Anführungszeichen verwendet werden, um SQL-Anweisungen zu ändern:
@DTW_ADDQUOTE(shlogid, shlogid) @query1()
Die Abfrage hat dann die folgende Form:
select * from shopper where shlogid = 'smith'' or shlogid<>''smith'
Beispiel 2: Verwenden von DTW_TRANSLATE()
Angenommen, Ihre Anwendung muss sicherstellen, dass der in der Eingabevariablen num_orders bereitgestellte Wert eine ganze Zahl ist. Hierzu können Sie die Umsetztabelle trans_table erstellen, die alle Tastaturzeichen mit Ausnahme der numerischen Zeichen 0-9 enthält, und die Eingabe mit den Zeichenfolgefunktionen DTW_TRANSLATE und DTW_POS prüfen:
@DTW_TRANSLATE(num_orders, "x", trans_table, "x", string_out) @DTW_POS("x", string_out, result) %IF (result = "0") %{ continue with normal processing %} %ELSE %{ perform some sort of error processing %} %ENDIF
Beachten Sie, dass SQL-Anweisungen in gespeicherten Prozeduren nicht durch Benutzer über Web-Browser geändert werden können und dass vom Benutzer gestellte Eingabeparameterwerte durch die SQL-Datentypen, die den Eingabeparametern zugeordnet sind, beschränkt sind. In Situationen, in denen es unpraktisch ist, Benutzereingabewerte mit den Net.Data-Zeichenfolgefunktionen zu prüfen, können Sie gespeicherte Prozeduren verwenden.
Beispiel: Eine Abfragezeichenfolgezuordnung wie filename="../../x" kann zur Aufnahme einer Datei aus einem Verzeichnis führen, das normalerweise nicht in der Konfigurationsanweisung INCLUDE_PATH angegeben ist. Angenommen, Ihre Net.Data-Initialisierungsdatei enthält die folgende Pfadkonfigurationsanweisung:
INCLUDE_PATH /usr/lpp/netdata/include
Und angenommen, Ihr Net.Data-Makro enthält die folgende INCLUDE-Anweisung:
%INCLUDE "$(filename)"
Die Abfragezeichenfolgezuordnung filename="../../x" würde die Datei /usr/lpp/x enthalten, was durch die Angabe der Konfigurationsanweisung INCLUDE_PATH nicht beabsichtigt war.
Mit den Net.Data-Zeichenfolgefunktionen können Sie prüfen, ob der bereitgestellte Dateiname für die Anwendung geeignet ist. Sie können z. B. mit der folgenden Logik sicherstellen, dass der Eingabewert, der der Dateinamenvariablen zugeordnet ist, nicht die Zeichenfolge ".." enthält:
@DTW_POS("..", $(filename), result) %IF (result > "0") %{ perform some sort of error processing %} %ELSE %{ continue with normal processing %} %ENDIF
Beispiel: Die folgende SQL-Anweisung gibt Auftragsinformationen zu einem durch die Variable order_rn angegebenen Auftrag zurück:
select setsstatcode, setsfailtype, mestname from merchant, setstatus where merfnbr = setsmenbr and setsornbr = $(order_rn)
Diese Methode ermöglicht Benutzern, über einen Browser willkürliche Auftragsnummern anzugeben und möglicherweise sensible Informationen zu den Aufträgen anderer Kunden abzurufen. Sie können sich hiervor zum Beispiel schützen, indem Sie die folgenden Änderungen vornehmen:
Wenn z. B. shlogid die Spalte mit der Kunden-ID ist, die dem Auftrag zugeordnet ist, und wenn SESSION_ID eine Net.Data-Variable ist, welche die authentifizierte ID des Benutzers am Browser enthält, dann können Sie die vorherige SELECT-Anweisung durch die folgende Anweisung ersetzen:
select setsstatcode, setsfailtype, mestname from merchant, setstatus where merfnbr = setsmenbr and setsornbr = $(order_rn) and shlogid = $(SESSION_ID)
Weitere Informationen zum Schutz Ihrer Datenbestände enthält die Internet-Liste zu häufig gestellten Sicherheitsfragen, die Sie unter folgender Webadresse finden:
http://www.w3.org/Security/Faq