keras 를 사용 하여 SQL 주입 공격 에 대한 판단(인 스 턴 스 설명)

본 고 는 깊이 있 는 학습 프레임 워 크 keras 를 통 해 SQL 주입 특징 인식 을 하 는 것 이지 만 keras 를 사 용 했 지만 대부분 일반적인 신경 망 이 었 다.다만 규칙 화,dropout 층(깊이 있 는 학습 에 따라 나타 난 층)을 추가 했다.
기본 적 인 사 고 는 데이터(INT 형)를 한 무더기 넣 고 신경 망 계산(정방 향,역방향),SOFTMAX 다 분류 확률 로 각 유형의 확률 을 계산 하 는 것 이다.주의:여 기 는 두 가지 유형 만 있 으 면 0-정상 적 인 텍스트 이다.1-SQL 주입 텍스트 포함
파일 분할 에 python 파일 4 개 만 들 기:
util 클래스,char 를 int 로 변환 하 는 데 사용 합 니 다.
data 클래스 는 훈련 데 이 터 를 얻 고 데 이 터 를 검증 하 는 클래스 입 니 다.이곳 의 훈련 은 감독 훈련 이 있 기 때문에 이 때 는 원 그룹(x,y)으로 돌아 가 야 합 니 다.
trainer 류,keras 의 네트워크 모델 모델 링 은 손실 함수,훈련 epoch 횟수 등 을 포함 합 니 다.
predict 클래스,테스트 데 이 터 를 몇 개 가 져 와 효과 예측 클래스 를 봅 니 다.
먼저 trainer 류 코드 를 넣 고 네트워크 정 의 는 여기 있 습 니 다.가장 중요 한 것 은 데이터 형식 만큼 중요 합 니 다.(하하,데이터 형식 은 매우 중요 합 니 다.이런 프로그램 에서)

import SQL  Data
import numpy as np
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.layers.normalization import BatchNormalization
from keras.optimizers import SGD
 
x, y=SQL  Data.loadSQLInjectData()
availableVectorSize=15
x=keras.preprocessing.sequence.pad_sequences(x, padding='post', maxlen=availableVectorSize)
y=keras.utils.to_categorical(y, num_classes=2)
 
 
model = Sequential()
model.add(Dense(64, activation='relu', input_dim=availableVectorSize))
model.add(BatchNormalization())
model.add(Dropout(0.3))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(2, activation='softmax'))
 
sgd = SGD(lr=0.001, momentum=0.9)
model.compile(loss='mse',
  optimizer=sgd,
  metrics=['accuracy'])
 
history=model.fit(x, y,epochs=500,batch_size=16)
 
model.save('E:\\sql_checker\\models\\trained_models.h5')
print("DONE, model saved in path-->E:\\sql_checker\\models\\trained_models.h5")
 
import matplotlib.pyplot as plt
plt.plot(history.history['loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
먼저 위의 plt 코드 를 설명 합 니 다.가장 쉽게 설명 할 수 있 기 때문에 이 코드 는 매번 epoch 의 훈련 손실 loss value 를 접 는 그림 으로 표시 합 니 다.
  
훈련 이란 무엇 인가?손실 loss value 는 무엇 입 니까?
훈련의 목적 은 인터넷 에서 최종 적 으로 계 산 된 분류 데이터 가 우리 가 제시 한 y 와 일치 하도록 하기 위 한 것 이다.그것 이 일치 하지 않 으 면 어떻게 계산 합 니까?일치 하지 않 으 면 손실 이 있다 는 것 이다.즉,훈련 의 목적 은 일치 해 야 한 다 는 것 이다.즉,손실 을 최소 화 하 는 것 이다.
어떻게 손실 을 최소 화 합 니까?경사도 가 떨 어 집 니 다.여 기 는 SGD 최적화 알고리즘 을 사용 합 니 다.

from keras.optimizers import SGD
 
sgd = SGD(lr=0.001, momentum=0.9)
model.compile(loss='mse',
  optimizer=sgd,
  metrics=['accuracy'])
위의 이 코드 의 loss='mse'는 바로 그러한 손실 함 수 를 사용 하고 여러 가지 손실 함 수 를 정의 한 것 입 니 다.여러분 스스로 참고 하 세 요.
optimizer=sgd 는 최적화 알고리즘 을 사용 하 는 것 입 니 다.서로 다른 optimizer 는 서로 다른 매개 변 수 를 가지 고 있 습 니 다.
모든 연결 NN 을 사용 하기 때문에 고정 적 인 입력 size 가 필요 합 니 다.이 함 수 는 고정(0 을 보충 하지 않 음)특징 벡터 size 를 사용 합 니 다.

x=keras.preprocessing.sequence.pad_sequences(x, padding='post', maxlen=availableVectorSize)
마지막 분류 출력 을 살 펴 보 겠 습 니 다.one hot 입 니 다.이 one hot 은 여러분 이 직접 찾 아 보 세 요.쉬 운 정 의 는 공간 을 낭비 하 는 것 입 니 다.분류 간 에 연관 성 이 없 지만 여기 서 사용 하 는 것 이 편리 합 니 다.

y=keras.utils.to_categorical(y, num_classes=2)
그리고 예측 부분 코드 를 말씀 드 리 겠 습 니 다.

import SQL  Data
import Converter
 
 
import numpy as np
import keras
from keras.models import load_model
 
print("predict....")
 
x=SQL  Data.loadTestSQLInjectData()
x=keras.preprocessing.sequence.pad_sequences(x, padding='post', maxlen=15)
 
model=load_model('E:\\sql_checker\\models\\trained_models.h5')
result=model.predict_classes(x, batch_size=len(x))
result=Converter.convert2label(result)
print(result)
 
 
print("DONE")
이 부분 코드 는 이해 하기 쉽 고 y 도 없다.
  
됐어,그 정도 재 미 있 는 것 같 아.
다음은 다른 몇 개의 도구 류,데이터 류 코드 를 내 놓 습 니 다.

def toints(sentence):
 base=ord('0')
 ary=[]
 for c in sentence:
  ary.append(ord(c)-base)
 return ary
 
 
def convert2label(vector):
 string_array=[]
 for v in vector:
  if v==1:
   string_array.append('SQL  ')
  else:
   string_array.append('    ')
 return string_array

import Converter
import numpy as np
 
def loadSQLInjectData():
 x=[]
 x.append(Converter.toints("100"))
 x.append(Converter.toints("150"))
 x.append(Converter.toints("1"))
 x.append(Converter.toints("3"))
 x.append(Converter.toints("19"))
 x.append(Converter.toints("37"))
 x.append(Converter.toints("1'--"))
 x.append(Converter.toints("1' or 1=1;--"))
 x.append(Converter.toints("updatable"))
 x.append(Converter.toints("update tbl"))
 x.append(Converter.toints("update someb"))
 x.append(Converter.toints("update"))
 x.append(Converter.toints("updat"))
 x.append(Converter.toints("update a"))
 x.append(Converter.toints("'--"))
 x.append(Converter.toints("' or 1=1;--"))
 x.append(Converter.toints("aupdatable"))
 x.append(Converter.toints("hello world"))
 
 y=[[0],[0],[0],[0],[0],[0],[1],[1],[0],[1],[1],[0],[0],[1],[1],[1],[0],[0]]
 
 x=np.asarray(x)
 y=np.asarray(y)
 
 return x, y
 
 
def loadTestSQLInjectData(): 
 x=[]
 x.append(Converter.toints("some value"))
 x.append(Converter.toints("-1"))
 x.append(Converter.toints("' or 1=1;--"))
 x.append(Converter.toints("noupdate"))
 x.append(Converter.toints("update "))
 x.append(Converter.toints("update"))
 x.append(Converter.toints("update z"))
 x=np.asarray(x)
 return x
이 글 은 keras 를 사용 하여 SQL 주입 공격 에 대한 판단(인 스 턴 스 설명)을 하 는 것 이 바로 편집장 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 하 시 기 를 바 랍 니 다.여러분 들 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기