1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
| import pandas as pd from sklearn.utils import shuffle
import re from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
import pickle
def read_csv(file_path, lable): data = pd.read_csv(file_path, header=None, names=["str"], usecols=[0]) data["lable"] = lable
return data
def data_process(normal, xss): all = pd.concat([normal, xss]) data = all["str"] lable = all["lable"] data, lable = shuffle(data, lable, random_state=42)
return data, lable
def data_tokenizer(data): return re.findall(r'\w+', data)
def data_vectorizer(data,lable): vectorizer = TfidfVectorizer(tokenizer=data_tokenizer) x = vectorizer.fit_transform(data) y = lable
return x, y, vectorizer
def model_train(x_train, y_train): model = LogisticRegression() model.fit(x_train, y_train)
return model
def model_evaluate(x_test,y_test): y_predict = model.predict(x_test) report = classification_report(y_test, y_predict, labels=["xss", "normal"], target_names=["xss字符串", "正常字符串"],digits=2)
return report
def model_save(model, vectorizer): save = input("是否保存训练的模型(y/n):") if save == "y" or "Y": print(save) with open('model.pkl', 'wb') as f: pickle.dump(model, f) with open('vectorizer.pkl', 'wb') as f: pickle.dump(vectorizer, f) print("保存成功!") return True else: return False
if __name__ == "__main__": print("-------XSS检测-------") while True: with open("model.pkl", 'rb') as f: model = pickle.load(f) with open('vectorizer.pkl', 'rb') as f: vectorizer = pickle.load(f) str_list = input("输入需要检测的字符串:").split("\n") x = vectorizer.transform(str_list) y_predict = model.predict(x) print("检测结果为:",y_predict)
|