Verwenden von Keras zur Beurteilung von SQL-Injection-Angriffen (Beispielerklärung)

Verwenden von Keras zur Beurteilung von SQL-Injection-Angriffen (Beispielerklärung)

In diesem Artikel wird das Deep-Learning-Framework Keras verwendet, um SQL-Injection-Merkmalserkennung durchzuführen. Obwohl Keras verwendet wird, sind die meisten neuronalen Netzwerke immer noch gewöhnliche neuronale Netzwerke, denen nur einige Regularisierungs- und Dropout-Schichten (Schichten, die bei Deep Learning auftreten) hinzugefügt wurden.

Die Grundidee besteht darin, eine Reihe von Daten (Typ INT) einzuspeisen, die Wahrscheinlichkeit jeder Klasse durch neuronale Netzwerkberechnung (vorwärts und rückwärts) zu berechnen und die Wahrscheinlichkeitsberechnung für mehrere Klassifizierungen von SOFTMAX durchzuführen. Hinweis: Hier gibt es nur 2 Kategorien: 0 – normaler Text; 1 – Text mit SQL-Injection

Im Hinblick auf die Dateisegmentierung werden 4 Python-Dateien erstellt:

Util-Klasse, die zum Konvertieren von char in int verwendet wird (NN erfordert numerische Typen, alle anderen Typen müssen in int/float konvertiert werden, bevor sie eingespeist werden können, auch als Feed bezeichnet)

Die Datenklasse wird verwendet, um Trainingsdaten und Verifizierungsdaten abzurufen. Da es sich hier bei dem Training um ein überwachtes Training handelt, muss zu diesem Zeitpunkt ein Tupel (x, y) zurückgegeben werden.

Trainerklasse, Modellierung des Keras-Netzwerkmodells hier, einschließlich Verlustfunktion, Trainingsepochennummer usw.

Klasse vorhersagen, einige Testdaten abrufen und die Wirkung der Vorhersageklasse sehen

Geben Sie zuerst den Trainerklassencode ein. Hier befindet sich die Netzwerkdefinition. Sie ist die wichtigste und genauso wichtig wie das Datenformat (haha, das Datenformat ist bei dieser Art von Programm sehr wichtig).

SQL-Injection-Daten importieren
importiere Numpy als np
Keras importieren
von keras.models importiere Sequential
aus keras.layers importiere Dense, Dropout, Aktivierung
von keras.layers.normalization importiere BatchNormalization
von keras.optimizers importiere SGD
 
x, y=SQL-InjectionData.loadSQLInjectData()
verfügbareVektorgröße=15
x = keras.preprocessing.sequence.pad_sequences(x, Polsterung='post', maxlen=verfügbareVektorgröße)
y = keras.utils.to_categorical(y, Anzahl_Klassen=2)
 
 
Modell = Sequentiell()
model.add(Dense(64, Aktivierung='relu', input_dim=verfügbareVektorgröße))
Modell.Hinzufügen(BatchNormalisierung())
Modell.Hinzufügen(Ausfall(0,3))
model.add(Dense(64, Aktivierung='relu'))
Modell.Hinzufügen(Ausfall(0,3))
model.add(Dense(2, Aktivierung='softmax'))
 
sgd = SGD(lr=0,001, Impuls=0,9)
Modell.Kompilieren(Verlust='mse',
  Optimierer = sgd,
  Metriken = ['Genauigkeit'])
 
Verlauf = Modell.Fit(x, y, Epochen = 500, Batchgröße = 16)
 
model.save('E:\\sql_checker\\models\\trainierte_modelle.h5')
drucken("FERTIG, Modell gespeichert im Pfad-->E:\\sql_checker\\models\\trained_models.h5")
 
importiere matplotlib.pyplot als plt
plt.plot(History.History['Verlust'])
plt.title('Modellverlust')
plt.ylabel('Verlust')
plt.xlabel('Epoche')
plt.legend(['trainieren', 'testen'], loc='oben links')
plt.anzeigen()

Lassen Sie uns zunächst den obigen PLT-Code erklären, da dieser am einfachsten zu erklären ist. Dieser Code wird verwendet, um den Verlustwert jedes Epochentrainings mit einem Liniendiagramm anzuzeigen:

Was ist Training? Was ist der Verlustwert?

Der Zweck des Trainings besteht darin, die vom Netzwerk schließlich berechneten Klassifizierungsdaten mit dem von uns angegebenen y in Einklang zu bringen. Wie berechnet man die Inkonsistenz? Inkonsistenz bedeutet Verlust, daher besteht der Zweck des Trainings darin, konsistent zu sein, d. h. den Verlust zu minimieren.

Wie lassen sich Verluste minimieren? Gradientenabstieg, hier wird der SGD-Optimierungsalgorithmus verwendet:

von keras.optimizers importiere SGD
 
sgd = SGD(lr=0,001, Impuls=0,9)
Modell.Kompilieren(Verlust='mse',
  Optimierer = sgd,
  Metriken = ['Genauigkeit'])

Der Verlust = 'mse' im obigen Code definiert die zu verwendende Verlustfunktion. Es gibt mehrere andere Verlustfunktionen. Sie können diese selbst nachschlagen.

optimizer=sgd ist der zu verwendende Optimierungsalgorithmus. Verschiedene Optimierer haben unterschiedliche Parameter.

Da hier ein voll verbundenes NN verwendet wird, ist eine feste Eingangsgröße erforderlich. Mit dieser Funktion wird die Größe des Merkmalsvektors festgelegt (wenn sie nicht ausreicht, wird 0 hinzugefügt):

x = keras.preprocessing.sequence.pad_sequences(x, Polsterung='post', maxlen=verfügbareVektorgröße)

Werfen wir einen Blick auf die endgültige Klassifizierungsausgabe. Sie ist heiß. Sie können sie selbst überprüfen. Sie ist sehr einfach zu definieren. Es ist reine Platzverschwendung. Es gibt keine Korrelation zwischen den Kategorien, aber sie ist hier sehr praktisch zu verwenden.

y = keras.utils.to_categorical(y, Anzahl_Klassen=2)

Lassen Sie uns dann über den Vorhersagecode sprechen:

SQL-Injection-Daten importieren
Importkonverter
 
 
importiere Numpy als np
Keras importieren
von keras.models importiere load_model
 
drucken("vorhersagen...")
 
x=SQL InjectionData.loadTestSQLInjectData()
x = keras.preprocessing.sequence.pad_sequences(x, Polsterung='post', maxlen=15)
 
Modell = Modell laden('E:\\sql_checker\\Modelle\\trainierte_Modelle.h5')
Ergebnis = Modell.predict_classes(x, Batchgröße = Länge(x))
Ergebnis = Konverter.convert2label(Ergebnis)
drucken(Ergebnis)
 
 
drucken("FERTIG")

Dieser Teil des Codes ist leicht zu verstehen, und es gibt kein y

Okay, das scheint Sinn zu machen.

Hier sind einige andere Werkzeug- und Datenklassencodes:

def toints (Satz):
 Basis=ord('0')
 ary=[]
 für c im Satz:
  ary.append(ord(c)-base)
 Rückkehr
 
 
def convert2label(Vektor):
 Zeichenfolgenarray=[]
 für v im Vektor:
  wenn v==1:
   string_array.append('SQL-Injektion')
  anders:
   string_array.append('normaler Text')
 Zeichenfolgen-Array zurückgeben
Importkonverter
importiere Numpy als np
 
def loadSQLInjectData():
 x=[]
 x.anhängen(Converter.toints("100"))
 x.anhängen(Converter.toints("150"))
 x.anhängen(Converter.toints("1"))
 x.anhängen(Converter.toints("3"))
 x.anhängen(Converter.toints("19"))
 x.anhängen(Converter.toints("37"))
 x.anhängen(Converter.toints("1'--"))
 x.append(Converter.toints("1' oder 1=1;--"))
 x.append(Converter.toints("aktualisierbar"))
 x.append(Converter.toints("Tabelle aktualisieren"))
 x.append(Converter.toints("aktualisiere etwas"))
 x.anhängen(Converter.toints("aktualisieren"))
 x.append(Converter.toints("updat"))
 x.append(Converter.toints("aktualisiere a"))
 x.anhängen(Converter.toints("'--"))
 x.append(Converter.toints("' oder 1=1;--"))
 x.append(Converter.toints("aupdatable"))
 x.append(Converter.toints("Hallo Welt"))
 
 y=[[0],[0],[0],[0],[0],[0],[1],[1],[0],[1],[0],[1],[0],[1],[0],[1],[0],[1],[0],[1],[0],[0]]
 
 x = np.asarray(x)
 y = np.alsarray(y)
 
 Rückgabewert x, y
 
 
def loadTestSQLInjectData(): 
 x=[]
 x.append(Converter.toints("ein Wert"))
 x.anhängen(Converter.toints("-1"))
 x.append(Converter.toints("' oder 1=1;--"))
 x.append(Converter.toints("kein Update"))
 x.append(Converter.toints("aktualisieren"))
 x.anhängen(Converter.toints("aktualisieren"))
 x.anhängen(Converter.toints("update z"))
 x = np.asarray(x)
 Rückgabe x

Der obige Artikel über die Verwendung von Keras zur Beurteilung von SQL-Injection-Angriffen (mit Beispielen) ist alles, was ich mit Ihnen teilen kann. Ich hoffe, er kann Ihnen als Referenz dienen, und ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden.

Das könnte Sie auch interessieren:
  • Erkennen von SQL-Injection-Angriffscode unter asp.net

<<:  Detaillierte Erklärung der Hook-Funktion und -Nutzung im Lebenszyklus der neuen Version von React

>>:  Das Linux-System öffnet die Ports 3306, 8080 usw. zur Außenwelt. Detaillierte Erläuterung der Firewall-Einstellungen

Artikel empfehlen

Beispielcode für CSS3 zum Erzielen eines Bildlaufleisten-Verschönerungseffekts

Der spezifische Code lautet wie folgt: /*Breite d...

Einstellungen für den Ubuntu-Boot-Autostart-Dienst

So erstellen Sie einen Dienst und starten ihn aut...

Umfassendes Verständnis des MySQL-Protokolls für langsame Abfragen

Inhaltsverzeichnis Was ist das Protokoll langsame...

Detailliertes Tutorial zur MySQL-Installation und -Konfiguration

Inhaltsverzeichnis Installationsfreie Version von...

Implementierung der Ausführung von SQL Server mit Docker

Jetzt ist .net Core plattformübergreifend und jed...

Datendiebstahl mit CSS in Firefox

0x00 Einführung Vor einigen Monaten habe ich eine...

Detaillierte Erläuterung des MySQL-Mechanismus zur gemeinsamen Abfrageoptimierung

Inhaltsverzeichnis Strategie zur Ausführung föder...

So führen Sie py-Dateien direkt unter Linux aus

1. Erstellen Sie zuerst die Datei (wechseln Sie p...

Müssen Designer das Programmieren lernen?

Oftmals wird nach der Fertigstellung eines Webdes...

JS-Implementierung eines Karussellbeispiels

In diesem Artikel wird der spezifische JS-Code zu...

Mehrere Möglichkeiten zum Festlegen der Ablaufzeit von localStorage

Inhaltsverzeichnis Problembeschreibung 1. Basislö...