Veli
New member
- Joined
- Feb 15, 2023
- Messages
- 3
- Programming Experience
- Beginner
SQLInjectionDetection:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Numpy;
using Python.Runtime;
using Keras;
using Keras.Layers;
using Keras.Models;
using Keras.Optimizers;
using Keras.losses;
namespace SQLInjectionDetection
{
class Program
{
static void Main(string[] args)
{
// Load CSV file
var trainData = File.ReadAllLines("tokens.csv")
.Select(l => l.Split(','))
.Select(s => new { Token = s[0], Label = int.Parse(s[1]) })
.ToList();
// Shuffle trainData
var random = new Random();
trainData = trainData.OrderBy(d => random.Next()).ToList();
// Split trainData into training and validation sets
var splitIndex = (int)(trainData.Count * 0.8);
var trainDataSubset = trainData.Take(splitIndex).ToList();
var testDataSubset = trainData.Skip(splitIndex).ToList();
// Define vocabulary and tokenize trainData
var vocabulary = new HashSet<char>(trainDataSubset.SelectMany(d => d.Token).Distinct());
var tokenToIndex = vocabulary.Select((c, i) => new { Token = c, Index = i }).ToDictionary(t => t.Token, t => t.Index);
var maxSequenceLength = trainDataSubset.Max(d => d.Token.Length);
var trainTokenized = Tokenize(trainDataSubset, tokenToIndex, maxSequenceLength);
var testTokenized = Tokenize(testDataSubset, tokenToIndex, maxSequenceLength);
// Build RNN model
using (Py.GIL())
{
dynamic keras = Py.Import("keras");
dynamic np = Py.Import("numpy");
var input = new Input(shape: 1000);
var embedding = new Embedding(vocabulary.Count, 32).Apply(input);
var lstm = new LSTM(32).Apply(embedding);
var output = new Dense(1, activation: keras.activations.sigmoid).Apply(lstm);
var model = new Model(inputs: input, outputs: output);
model.Compile(optimizer: new Adam(), loss: new BinaryCrossentropy(), metrics: new[] { "accuracy" });
// Train model
var trainX = trainTokenized.Item1;
var trainY = trainTokenized.Item2;
var testX = testTokenized.Item1;
var testY = testTokenized.Item2;
model.Fit(trainX, trainY, batchSize: 32, epochs: 10, validationData: (testX, testY));
// Take user input and make prediction
Console.Write("Enter user input: ");
var userInput = Console.ReadLine();
var inputTokenized = TokenizeInput(userInput, tokenToIndex, maxSequenceLength);
var prediction = model.Predict(inputTokenized).GetData<float>()[0, 0];
Console.WriteLine($"Prediction: {(prediction > 0.5 ? "Malicious" : "Safe")} (Score: {prediction:F4})");
// Evaluate model
var testMetrics = model.Evaluate(testX, testY);
Console.WriteLine($"Test loss: {testMetrics[0]:F4}");
Console.WriteLine($"Test accuracy: {testMetrics[1]:F4}");
}
}
private static (NDarray, NDarray) Tokenize(List<dynamic> data, Dictionary<char, int> tokenToIndex, int maxSequenceLength)
{
var numExamples = data.Count;
var X = np.zeros((numExamples, maxSequenceLength));
var Y = np.zeros((numExamples, 1));
for (var i = 0; i < numExamples; i++)
{
var tokens = data[i].Token;
var label = data[i].Label;
Y[i] = label;
for (var j = 0; j < tokens.Length; j++)
{
var token = tokens[j];
var index = tokenToIndex[token];
X[i, j] = index;
}
}
return (X, Y);
}
}
}