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

Über das WeChat Mini-Programm zur Implementierung von Cloud-Zahlungen

Inhaltsverzeichnis 1. Einleitung 2. Gedankenanaly...

Detaillierte Erklärung der Vue-Komponenten

<Text> <div id="Wurzel"> &l...

Problem mit Zeitzonenfehler im Docker-Container

Inhaltsverzeichnis Hintergrund Frage Problemanaly...

Installations- und Verwendungsschritte für Docker Compose

Inhaltsverzeichnis 1. Was ist Docker Compose? 2. ...

Meta Viewport ermöglicht die Vollbildanzeige von Webseiten auf dem iPhone

In meiner Verzweiflung dachte ich plötzlich: Wie i...

Lösen Sie das Problem der Randzusammenführung

1. Die Ränder von Geschwisterelementen zusammenfü...

React verwendet Emotionen zum Schreiben von CSS-Code

Inhaltsverzeichnis Einführung: Installation von E...

Detaillierte Erklärung zu anonymen Slots und benannten Slots in Vue

Inhaltsverzeichnis 1. Anonyme Slots 2. Benannte S...

So implementieren Sie die Paging-Funktion des MyBatis-Interceptors

So implementieren Sie die Paging-Funktion des MyB...

Wann ist die Verwendung von dl, dt und dd sinnvoll?

dl: Definitionsliste Definitionsliste dt: Definiti...