1
+ from bottle import route , run , template ,post ,request
2
+ import matplotlib .pyplot as plt
3
+ import nltk
4
+ import pandas as pd
5
+ import scipy
6
+ from nltk .util import ngrams
7
+ from scipy .sparse import coo_matrix , hstack , vstack
8
+ from sklearn .datasets import load_iris
9
+ from sklearn .decomposition import TruncatedSVD
10
+ from sklearn .feature_extraction .text import CountVectorizer , TfidfVectorizer
11
+ from sklearn .linear_model import LogisticRegression
12
+ from sklearn .metrics import f1_score
13
+ from sklearn .model_selection import train_test_split
14
+ import os
15
+ import pickle
16
+ import random
17
+ import json
18
+ import string
19
+
20
+ def get1Grams (payload_obj ):
21
+ '''Divides a string into 1-grams
22
+
23
+ Example: input - payload: "<script>"
24
+ output- ["<","s","c","r","i","p","t",">"]
25
+ '''
26
+ payload = str (payload_obj )
27
+ ngrams = []
28
+ for i in range (0 ,len (payload )- 1 ):
29
+ ngrams .append (payload [i :i + 1 ])
30
+ return ngrams
31
+
32
+ def get2Grams (payload_obj ):
33
+ '''Divides a string into 2-grams
34
+
35
+ Example: input - payload: "<script>"
36
+ output- ["<s","sc","cr","ri","ip","pt","t>"]
37
+ '''
38
+ payload = str (payload_obj )
39
+ ngrams = []
40
+ for i in range (0 ,len (payload )- 2 ):
41
+ ngrams .append (payload [i :i + 2 ])
42
+ return ngrams
43
+
44
+ def get3Grams (payload_obj ):
45
+ '''Divides a string into 3-grams
46
+
47
+ Example: input - payload: "<script>"
48
+ output- ["<sc","scr","cri","rip","ipt","pt>"]
49
+ '''
50
+ payload = str (payload_obj )
51
+ ngrams = []
52
+ for i in range (0 ,len (payload )- 3 ):
53
+ ngrams .append (payload [i :i + 3 ])
54
+ return ngrams
55
+
56
+
57
+
58
+ @post ('/hello/<name>' )
59
+ def index (name ):
60
+ data_params = request .json
61
+ print (data_params )
62
+ #postdata = name = request.forms.get("query_val")
63
+ return_value = run_model (data_params )
64
+ print ("return value " ,return_value )
65
+ return str (return_value )
66
+
67
+ return "1"
68
+ def run_model (param ):
69
+ list_of_results = []
70
+ check = 0
71
+ for key in param :
72
+ content = param [key ]
73
+ q_val = content
74
+ type_attack = None
75
+ q_key = key
76
+ df = pd .DataFrame ([[content ]],columns = ['content' ])
77
+ df ['content' ] = df ['content' ].str .strip ('\n ' )
78
+ df ['content' ] = df ['content' ].str .lower ()
79
+ X1C = count_vectorizer_1grams .transform (df ["content" ])
80
+ X2C = count_vectorizer_2grams .transform (df ["content" ])
81
+ X3C = count_vectorizer_3grams .transform (df ["content" ])
82
+ X1T = tfidf_vectorizer_1grams .transform (df ["content" ])
83
+ X2T = tfidf_vectorizer_2grams .transform (df ["content" ])
84
+ X3T = tfidf_vectorizer_3grams .transform (df ["content" ])
85
+ X = hstack ([X1C ,X2C ,X3C ,X1T ,X2T ,X3T ])
86
+ predicted = logistic_model .predict (X )
87
+ predicted_sql = sql_model .predict_proba (X )[0 ][1 ]
88
+ predicted_traverse = traverse_model .predict_proba (X )[0 ][1 ]
89
+ predicted_xss = xss_model .predict_proba (X )[0 ][1 ]
90
+ max_value = max (predicted_sql ,predicted_traverse ,predicted_xss )
91
+ if max_value >= 0.5 :
92
+ if max_value == predicted_sql :
93
+ type_attack = "SQLi"
94
+ elif max_value == predicted_traverse :
95
+ type_attack = "Path Traversal"
96
+ elif max_value == predicted_xss :
97
+ type_attack = "XSS"
98
+ dicc = {
99
+ "type" :type_attack ,
100
+ "param" : q_key ,
101
+ "val" : q_val ,
102
+ "confidence" : max_value
103
+ }
104
+ list_of_results .append (dicc )
105
+ return json .dumps (list_of_results )
106
+
107
+ if __name__ == '__main__' :
108
+ count_vectorizer_1grams = pickle .load (open ("c1g.vec" ,"rb" ))
109
+ count_vectorizer_2grams = pickle .load (open ("c2g.vec" ,"rb" ))
110
+ count_vectorizer_3grams = pickle .load (open ("c3g.vec" ,"rb" ))
111
+ tfidf_vectorizer_1grams = pickle .load (open ("t1g.vec" ,"rb" ))
112
+ tfidf_vectorizer_2grams = pickle .load (open ("t2g.vec" ,"rb" ))
113
+ tfidf_vectorizer_3grams = pickle .load (open ("t3g.vec" ,"rb" ))
114
+ logistic_model = pickle .load (open ("logistic.model" ,"rb" ))
115
+ sql_model = pickle .load (open ("sql.model" ,"rb" ))
116
+ traverse_model = pickle .load (open ("traverse.model" ,"rb" ))
117
+ xss_model = pickle .load (open ("xss.model" ,"rb" ))
118
+
119
+ print ("valalal" )
120
+ run (host = 'localhost' , port = 5000 ,reloader = True )
0 commit comments