• 大小: 10.83MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-11-18
  • 语言: Python
  • 标签:

资源简介

机器学习驱动的Web应用程序防火墙以高精度检测恶意查询

资源截图

代码片段和文件信息

‘‘‘
FWAF - Machine Learning driven Web Application Firewall
Author: Faizan Ahmad
Performance improvements: Timo Mechsner
Website: http://fsecurify.com
‘‘‘

from sklearn.feature_extraction.text import TfidfVectorizer
import os
from sklearn.cross_validation import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
import urllib.parse

import matplotlib.pyplot as plt

def loadFile(name):
    directory = str(os.getcwd())
    filepath = os.path.join(directory name)
    with open(filepath‘r‘) as f:
        data = f.readlines()
    data = list(set(data))
    result = []
    for d in data:
        d = str(urllib.parse.unquote(d))   #converting url encoded data to simple string
        result.append(d)
    return result

badQueries = loadFile(‘badqueries.txt‘)
validQueries = loadFile(‘goodqueries.txt‘)

badQueries = list(set(badQueries))
validQueries = list(set(validQueries))
allQueries = badQueries + validQueries
yBad = [1 for i in range(0 len(badQueries))]  #labels 1 for malicious and 0 for clean
yGood = [0 for i in range(0 len(validQueries))]
y = yBad + yGood
queries = allQueries

vectorizer = TfidfVectorizer(min_df = 0.0 analyzer=“char“ sublinear_tf=True ngram_range=(13)) #converting data to vectors
X = vectorizer.fit_transform(queries)

X_train X_test y_train y_test = train_test_split(X y test_size=0.2 random_state=42) #splitting data

badCount = len(badQueries)
validCount = len(validQueries)

lgs = LogisticRegression(class_weight={1: 2 * validCount / badCount 0: 1.0}) # class_weight=‘balanced‘)
lgs.fit(X_train y_train) #training our model

##############
# Evaluation #
##############

predicted = lgs.predict(X_test)

fpr tpr _ = metrics.roc_curve(y_test (lgs.predict_proba(X_test)[: 1]))
auc = metrics.auc(fpr tpr)

print(“Bad samples: %d“ % badCount)
print(“Good samples: %d“ % validCount)
print(“baseline Constant negative: %.6f“ % (validCount / (validCount + badCount)))
print(“------------“)
print(“Accuracy: %f“ % lgs.score(X_test y_test))  #checking the accuracy
print(“Precision: %f“ % metrics.precision_score(y_test predicted))
print(“Recall: %f“ % metrics.recall_score(y_test predicted))
print(“F1-Score: %f“ % metrics.f1_score(y_test predicted))
print(“AUC: %f“ % auc)

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-05-15 00:24  Fwaf-Machine-Learning-driven-Web-Application-Firewall-master\
     文件          65  2017-05-15 00:24  Fwaf-Machine-Learning-driven-Web-Application-Firewall-master\.gitignore
     文件         294  2017-05-15 00:24  Fwaf-Machine-Learning-driven-Web-Application-Firewall-master\README.md
     文件     3374922  2017-05-15 00:24  Fwaf-Machine-Learning-driven-Web-Application-Firewall-master\badqueries.txt
     文件      296126  2017-05-15 00:24  Fwaf-Machine-Learning-driven-Web-Application-Firewall-master\firewall_fsecurify.jpg
     文件    24063954  2017-05-15 00:24  Fwaf-Machine-Learning-driven-Web-Application-Firewall-master\goodqueries.txt
     文件        2276  2017-05-15 00:24  Fwaf-Machine-Learning-driven-Web-Application-Firewall-master\script.py

评论

共有 条评论