Verwaltung und Programmierung


Verwenden von Net.Data-Mechanismen

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-Konfigurationsvariablen

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.

Steuern des Dateizugriffs mit Pfadanweisungen
Net.Data überprüft die Einstellungen der Pfadkonfigurationsanweisungen, um die Speicherposition der Dateien und ausführbaren Programme zu ermitteln, die von Net.Data-Makros verwendet werden. Diese Pfadanweisungen geben mindestens ein Verzeichnis an, das Net.Data durchsucht, wenn es versucht, Makros, ausführbare Dateien, Kopfdateien oder andere unstrukturierte Dateien zu lokalisieren. Durch die selektive Aufnahme von Verzeichnissen in diese Pfadanweisungen können Sie explizit steuern, auf welche Dateien die Benutzer über Browser zugreifen können. Zusätzliche Informationen zu Pfadanweisungen finden Sie in Konfigurieren von Net.Data.

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).

Inaktivieren von SHOWSQL für Produktionssysteme
Mit der Variable SHOWSQL kann der Benutzer angeben, dass Net.Data die in Net.Data-Funktionen angegebenen SQL-Anweisungen in einem Web-Browser anzeigt. Diese Variable wird hauptsächlich zum Entwickeln und Testen von SQL in einer Anwendung verwendet und wurde nicht zur Verwendung in Produktionssystemen konzipiert.

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.

Erwägen der Aktivierung von Direktanforderungen für Produktionsumgebungen
Bei der Direktanforderungsmethode zum Aufrufen von Net.Data kann ein Benutzer die Ausführung einer SQL-Anweisung bzw. eines Perl-, REXX- oder C-Programms direkt in einer URL-Adresse angeben. Bei der Makroanforderungsmethode können Benutzer nur jene SQL-Anweisungen und Funktionen ausführen, die in einem Makro definiert sind bzw. aufgerufen werden.

Ü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.

Kennwortverschlüsselung
Wenn Sie LOGIN und PASSWORD in der Konfigurationsdatei der Direktverbindung (dtwcm.cnf) und/oder in Net.Data-Makros angeben, sollten Sie das Kennwort schützen, indem Sie es verschlüsseln.

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:

Makro-Entwicklungsverfahren

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.

Sicherstellen, dass Net.Data-Variablen in einer URL-Adresse nicht überschrieben werden können
Die Einstellung von Net.Data-Variablen durch einen Benutzer in einer URL-Adresse überschreibt die Auswirkung von DEFINE-Anweisungen, mit denen Variablen in einem Makro initialisiert werden. Dadurch wird eventuell die Art der Makroausführung geändert. Sie können dies verhindern, indem Sie Ihre Net.Data-Variablen mit der Funktion DTW_ASSIGN() initialisieren.

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.

Sicherstellen, dass Ihre SQL-Anweisungen nicht so geändert werden können, dass sich das beabsichtigte Verhalten Ihrer Anwendung ändert

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:

  1. Geben Sie die Syntax für gültige Eingaben an. Zum Beispiel muss eine Kunden-ID mit einem Buchstaben anfangen und kann nur alphanumerische Zeichen enthalten.
  2. Ermitteln Sie, welcher Schaden durch versehentliche oder absichtliche falsche Eingaben sowie durch Eingaben, durch die auf interne Daten der Net.Data-Anwendung zugegriffen werden soll, verursacht werden kann.
  3. Nehmen Sie in das Makro Eingabeprüfungsanweisungen auf, die die Anforderungen der Anwendung erfüllen. Eine derartige Prüfung hängt von der Syntax der Eingabe und ihrer Verwendungsweise ab. In einfacheren Fällen reicht es eventuell aus, die Eingabe auf ungültigen Inhalt zu überprüfen oder Net.Data aufzurufen, um den Typ der Eingabe zu prüfen. Wenn die Syntax der Eingabe komplexer gestaltet ist, muss der Makroentwickler eventuell die Eingabe teilweise oder vollständig syntaktisch analysieren, um zu prüfen, ob sie gültig ist.

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.

Sicherstellen, dass ein Dateiname in einer INCLUDE-Anweisung nicht so geändert wird, dass sich das beabsichtigte Verhalten Ihrer Anwendung ändert
Wenn Sie den Wert für den Dateinamen mit einer INCLUDE-Anweisung bei Verwendung einer Net.Data-Variablen angeben, dann wird die aufzunehmende Datei erst während der Ausführung der INCLUDE-Datei ermittelt. Soll der Wert dieser Variablen in Ihrem Makro festgelegt werden, ein Benutzer jedoch nicht in der Lage sein, den vom Makro bereitgestellten Wert über einen Browser zu überschreiben, dann legen Sie den Wert der Variablen mit DTW_ASSIGN anstelle von DEFINE fest. Wenn der Benutzer in der Lage sein soll, über einen Browser einen Wert für den Dateinamen bereitzustellen, dann sollte Ihr Makro den angegebenen Wert prüfen.

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

Entwerfen Ihrer Datenbank und Abfragen, so dass Benutzeranforderungen keinen Zugriff auf sensible Daten anderer Benutzer haben
Einige Datenbankentwürfe sammeln sensible Benutzerdaten in einer einzigen Tabelle. Sofern SQL-Anforderungen SELECT nicht auf eine gewisse Art qualifiziert sind, hat diese Vorgehensweise zur Folge, dass ein beliebiger Benutzer über einen Web-Browser eventuell Zugriff auf alle sensiblen Daten hat.

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)

Verwenden verdeckter Net.Data-Variablen
Mit verdeckten Net.Data-Variablen können Sie verschiedene Kenndaten Ihrer Net.Data-Makros vor Benutzern schützen, die Ihre HTML-Quelle mit ihrem Web-Browser anzeigen möchten. Sie können zum Beispiel die interne Struktur Ihrer Datenbank verdecken. Weitere Informationen zu verdeckten Variablen finden Sie in Verdeckte Variablen.

Anfordern von Informationen zur Gültigkeitsprüfung von einem Benutzer
Sie können Ihr eigenes Schutzschema basierend auf der vom Benutzer gestellten Eingabe erstellen. Beispielsweise könnten Sie anhand eines HTML-Formulars Informationen zur Gültigkeitsprüfung von einem Benutzer anfordern und diese Informationen dann anhand von Daten, die Ihr Net.Data-Makro aus einer Datenbank abruft, oder durch Aufrufen eines externen Programms aus einer Funktion, die in Ihrem Net.Data-Makro definiert ist, überprüfen lassen.

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


[ Seitenanfang | Vorherige Seite | Nächste Seite ]