成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何使用深度學習檢測XSS

人工智能 深度學習
眾所周知,深度學習在計算機視覺、自然語言處理、人工智能等領域取得了極大的進展,在安全領域也開始嶄露頭角走向了實際應用。本文中進行的實驗主要以文本分類的方法,使用深度學習檢測XSS攻擊,由于本人是初學者,難免對算法本身的理解不夠確切,所以本文盡量使用通俗簡單的方式介紹算法,不會過多的講解細節,以免誤導大家。

如何使用深度學習檢測XSS

一、前言

眾所周知,深度學習在計算機視覺、自然語言處理、人工智能等領域取得了極大的進展,在安全領域也開始嶄露頭角走向了實際應用。本文中進行的實驗主要以文本分類的方法,使用深度學習檢測XSS攻擊,由于本人是初學者,難免對算法本身的理解不夠確切,所以本文盡量使用通俗簡單的方式介紹算法,不會過多的講解細節,以免誤導大家。

二、數據集

安全領域的公開數據集非常的稀缺,本文提供的實驗數據包含兩個部分:從xssed爬取的黑樣本作為正樣例,有4萬多條;另外提供約20萬條正常的http get請求記錄作為負樣例,為了保證數據安全,去除了url中的host、path等信息,僅保留了payload的部分。

以上數據url編碼后保存在csv中,由于部分原始數據進行過url編碼,所以要兩次url解碼后才能使用。

正樣例:

  1. topic=http://gmwgroup.harvard.edu/techniques/index.php?topic=<script>alert(document.cookie)</script> 
  2.  siteID=';alert(String.fromCharCode(88,83,83))//\';alert(String.fromCharCode(88,83,83))//";alert(String.fromCharCode(88,83,83))//\";alert(String.fromCharCode(88,83,83))//--></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT> 
  3.  js='"--></style></script><script>alert(/meehinfected/)</script></title><marquee><h1>XSS:)</h1><marquee><strong><blink>XSSTEST</blink></strong></marquee><h1  >XSS :) </h1></marquee> 

 負樣例:

  1. _=1498584888937/&list=FU1804,FU0,FU1707,FU1708,FU1709,FU1710,FU1711,FU1712 
  2.  hid=sgpy-windows-generic-device-id&v=8.4.0.1062&brand=1&platform=6&ifbak=0&ifmobile=0&ifauto=1&type=1&filename=sgim_privilege.zip 
  3.  iid=11491672248&device_id=34942737887&ac=wifi&channel=huawei&aid=13&app_name=news_article&version_code=621&version_name=6.2.1&device_platform=android&ssmix=a&device_type=FDR-A03L&device_brand=HUAWEI&language=zh&os_api=22&os_version=5.1.1&uuid=860947033207318&openudid=fc19d05187ebeb0&manifest_version_code=621&resolution=1200*1848&dpi=240&update_version_code=6214&_rticket=1498580286466 

三、分詞

使用文本分類的方法自然涉及到如何將文本分詞。觀察以上正樣例,人是如何辨別XSS的:參數內包含完整可執行的HTML標簽和DOM方法。所以要支持的分詞原則為:

單雙引號包含的內容 ‘xss’

http/https鏈接

<>標簽 <script>

<>開頭 <h1

參數名 topic=

函數體 alert(

字符數字組成的單詞

另外,為了減小分詞數量,需要把數字和超鏈接范化,將數字替換為”0”,超鏈接替換為http://u。

實現的代碼如下:

  1. def GeneSeg(payload): 
  2.  payload=payload.lower() 
  3.  payload=unquote(unquote(payload)) 
  4.  payload,num=re.subn(r'\d+',"0",payload) 
  5.  payload,num=re.subn(r'(http|https)://[a-zA-Z0-9\.@&/#!#\?]+',"http://u", payload) 
  6.  r = ''
  7.          (?x)[\w\.]+?\( 
  8.          |\) 
  9.          |"\w+?" 
  10.          |'\w+?' 
  11.          |http://\w 
  12.          |</\w+> 
  13.          |<\w+> 
  14.          |<\w+ 
  15.          |\w+= 
  16.          |> 
  17.         |[\w\.]+ 
  18.      ''
  19.  return nltk.regexp_tokenize(payload,r)  

分詞后的正樣例:

  1. ['topic=''http://u''<script>''alert(','document.cookie'')''</script>'
  2.  ['siteid=''alert(''string.fromcharcode(''0','0''0'')'')''alert(''string.fromcharcode(''0''0''0'')'')','alert(''string.fromcharcode(''0''0''0'')'')''alert(','string.fromcharcode(''0''0''0'')'')''>''</script>','>''>''<script>''alert(''string.fromcharcode(''0''0','0'')'')''</script>'
  3.  ['js=''>''</style>''</script>','<script>''alert(''meeh''infected'')''</script>','</title>''<marquee>''<h0>''xss'')''</h0>','<marquee>''<strong>''<blink>''xss''test','</blink>''</strong>''</marquee>''<h0''>','xss'')''</h0>''</marquee>'

 分詞后的負樣例:

  1. ['_=''0''list=''fu0''fu0''fu0''fu0','fu0''fu0''fu0''fu0'
  2.  ['hid=''sgpy''windows''generic''device''id','v=''0.0.0.0''brand=''0''platform=''0''ifbak=''0''ifmobile=','0''ifauto=''0''type=''0''filename=''sgim_privilege.zip'
  3.  ['iid=''0''device_id=''0''ac=''wifi','channel=''huawei''aid=''0''app_name=''news_article','version_code=''0''version_name=''0.0.0''device_platform=''android','ssmix=''a''device_type=''fdr''a0l''device_brand=''huawei','language=''zh''os_api=''0''os_version=''0.0.0''uuid=''0','openudid=''fc0d0ebeb0''manifest_version_code=''0''resolution=''0','0''dpi=''0''update_version_code=''0''_rticket=''0'

四、嵌入式詞向量

如何將分詞后的文本轉化為機器學習的問題,第一步是要找到一種方法把這些詞數學化。最常見的方法是獨熱編碼(one-hot),這種方法是把詞表表示為一個很長的向量,只有一個維度的值為1,其他都為0,如””””<script>”表示為[0,0,0,1,0,0,0,0…….]。這種方法存在一個重要的問題是,構成文本的向量是極其稀疏的,詞與詞之間是相互獨立的,機器學習無法理解詞的語義。嵌入式詞向量就是通過學習文本來用詞向量表征詞的語義信息,通過將詞嵌入空間使得語義相似的詞在空間內的距離接近??臻g向量可以表達如“話筒”和“麥克”這樣的同義詞,”cat”、”dog”、”fish”等詞在空間中也會聚集到一起。

在這里我們要使用嵌入式詞向量模型建立一個XSS的語義模型,讓機器能夠理解<script>、alert()這樣的HTML語言。取正樣例中出現次數最多的3000個詞,構成詞匯表,其他的詞標記為“UKN”,使用gensim模塊的word2vec類建模,詞空間維度取128維。

核心代碼:

  1. def build_dataset(datas,words): 
  2.  count=[["UNK",-1]] 
  3.  counter=Counter(words) 
  4.  count.extend(counter.most_common(vocabulary_size-1)) 
  5.  vocabulary=[c[0] for c in count
  6.  data_set=[] 
  7.  for data in datas: 
  8.  d_set=[] 
  9.  for word in data: 
  10.  if word in vocabulary: 
  11.  d_set.append(word) 
  12.  else
  13.  d_set.append("UNK"
  14.  count[0][1]+=1 
  15.  data_set.append(d_set) 
  16.  return data_set 
  17.  data_set=build_dataset(datas,words) 
  18.  model=Word2Vec(data_set,size=embedding_size,window=skip_window,negative=num_sampled,iter=num_iter) 
  19.  embeddings=model.wv  

五、數據預處理

通過建立好的詞向量模型,我們就可以用空間向量表示一個文本,結合前面的過程,完整的流程如圖:

 

最后將全部數據隨機切分為70%訓練數據和30%測試數據,用于以下三個神經網絡的訓練和測試,代碼示例:

  1. from sklearn.model_selection import train_test_split 
  2.  
  3. train_datas,test_datas,train_labels,test_labels=train_test_split(datas,labels,test_size=0.3)  

六、多層感知機

 

多層感知機(MLP)包含一個輸入層、輸出層和若干隱藏層。Keras可以使用Tensorflow作為后端輕松實現多層感知機,最終整個算法的準確率為99.9%,召回率為97.5%。核心代碼如下:

模型訓練:

  1. deftrain(train_generator,train_size,input_num,dims_num): 
  2.  print("Start Train Job! "
  3.  start=time.time() 
  4.  inputs=InputLayer(input_shape=(input_num,dims_num),batch_size=batch_size) 
  5.  layer1=Dense(100,activation="relu"
  6.  layer2=Dense(20,activation="relu"
  7.  flatten=Flatten() 
  8.  layer3=Dense(2,activation="softmax",name="Output"
  9.  optimizer=Adam() 
  10.  model=Sequential() 
  11.  model.add(inputs) 
  12.  model.add(layer1) 
  13.  model.add(Dropout(0.5)) 
  14.  model.add(layer2) 
  15.  model.add(Dropout(0.5)) 
  16.  model.add(flatten) 
  17.  model.add(layer3) 
  18.  call=TensorBoard(log_dir=log_dir,write_grads=True,histogram_freq=1) 
  19.  model.compile(optimizer,loss="categorical_crossentropy",metrics=["accuracy"]) 
  20.  model.fit_generator(train_generator,steps_per_epoch=train_size//batch_size,epochs=epochs_num,callbacks=[call])  

測試:

  1. deftest(model_dir,test_generator,test_size,input_num,dims_num,batch_size): 
  2.  model=load_model(model_dir) 
  3.  labels_pre=[] 
  4.  labels_true=[] 
  5.  batch_num=test_size//batch_size+1 
  6.  steps=0 
  7.  for batch,labels in test_generator: 
  8.  if len(labels)==batch_size: 
  9.  labels_pre.extend(model.predict_on_batch(batch)) 
  10.  else
  11.  batch=np.concatenate((batch,np.zeros((batch_size-len(labels),input_num,dims_num)))) 
  12.  labels_pre.extend(model.predict_on_batch(batch)[0:len(labels)]) 
  13.  labels_true.extend(labels) 
  14.  steps+=1 
  15.  print("%d/%dbatch"%(steps,batch_num)) 
  16.  labels_pre=np.array(labels_pre).round() 
  17.  def to_y(labels): 
  18.  y=[] 
  19.  for i in range(len(labels)): 
  20.  if labels[i][0]==1: 
  21.  y.append(0) 
  22.  else
  23.  y.append(1) 
  24.  return y 
  25.  y_true=to_y(labels_true) 
  26.  y_pre=to_y(labels_pre) 
  27.  precision=precision_score(y_true,y_pre) 
  28.  recall=recall_score(y_true,y_pre) 
  29.  print("Precision score is:",precision
  30.  print("Recall score is:",recall)  

七、循環神經網絡

 

循環神經網絡是一種時間遞歸神經網絡,能夠理解序列中上下文的知識,同樣使用Keras建立網絡,最終模型的準確率為99.5%,召回率為98.7%。核心代碼:

模型訓練:

  1. def train(train_generator,train_size,input_num,dims_num): 
  2.  print("Start Train Job! "
  3.  start=time.time() 
  4.  inputs=InputLayer(input_shape=(input_num,dims_num),batch_size=batch_size) 
  5.  layer1=LSTM(128) 
  6.  output=Dense(2,activation="softmax",name="Output"
  7.  optimizer=Adam() 
  8.  model=Sequential() 
  9.  model.add(inputs) 
  10.  model.add(layer1) 
  11.  model.add(Dropout(0.5)) 
  12.  model.add(output
  13.  call=TensorBoard(log_dir=log_dir,write_grads=True,histogram_freq=1) 
  14.  model.compile(optimizer,loss="categorical_crossentropy",metrics=["accuracy"]) 
  15.  model.fit_generator(train_generator,steps_per_epoch=train_size//batch_size,epochs=epochs_num,callbacks=[call])  

使用tensorboard對網絡的可視化:

 

八、卷積神經網絡

 

卷積神經網絡(CNN)相對于MLP網絡減少了需要訓練的參數數量,降低了計算量,同時能夠提煉深度特征進行分析,這里使用類似于Google VGG的一維卷積神經網絡,包含四個卷積層、兩個最大池化層、一個全連接層,最終的準確率為99.5%,召回率為98.3%,核心代碼:

  1. deftrain(train_generator,train_size,input_num,dims_num): 
  2. print("Start Train Job! "
  3. start=time.time() 
  4. inputs=InputLayer(input_shape=(input_num,dims_num),batch_size=batch_size) 
  5. layer1=Conv1D(64,3,activation="relu"
  6. layer2=Conv1D(64,3,activation="relu"
  7. layer3=Conv1D(128,3,activation="relu"
  8. layer4=Conv1D(128,3,activation="relu"
  9. layer5=Dense(128,activation="relu"
  10. output=Dense(2,activation="softmax",name="Output"
  11. optimizer=Adam() 
  12. model=Sequential() 
  13. model.add(inputs) 
  14. model.add(layer1) 
  15. model.add(layer2) 
  16. model.add(MaxPool1D(pool_size=2))model.add(Dropout(0.5)) 
  17. model.add(layer3) 
  18. model.add(layer4) 
  19. model.add(MaxPool1D(pool_size=2)) 
  20. model.add(Dropout(0.5)) 
  21. model.add(Flatten()) 
  22. model.add(layer5) 
  23. model.add(Dropout(0.5)) 
  24. model.add(output
  25. call=TensorBoard(log_dir=log_dir,write_grads=True,histogram_freq=1) 
  26. model.compile(optimizer,loss="categorical_crossentropy",metrics=["accuracy"]) 
  27. model.fit_generator(train_generator,steps_per_epoch=train_size//batch_size,epochs=epochs_num,callbacks=[call])  

九、總結

本文介紹了如何使用嵌入式詞向量建立XSS語義識別模型,并分別使用MLP、循環神經網絡、卷積神經網絡三種算法檢測XSS攻擊,三種算法都取得了不錯的效果。 

責任編輯:龐桂玉 來源: 36大數據
相關推薦

2019-05-24 10:30:38

2021-07-01 08:00:00

深度學習神經網絡架構

2016-03-16 09:33:40

2017-07-14 10:35:06

2021-11-02 11:48:39

深度學習惡意軟件觀察

2021-10-08 09:46:42

深度學習神經網絡人工智能

2022-10-26 15:41:38

深度學習Deepfake機器學習

2017-09-09 06:04:22

深度學習人物圖像神經網絡

2010-08-25 10:18:27

2013-01-09 15:27:45

DOM XSS檢測QtWebKitXSS

2019-06-25 10:09:42

Web攻擊機器學習網絡攻擊

2020-10-16 14:59:32

機器學習人工智能神經網絡

2018-05-18 09:57:04

深度學習乳腺癌神經網絡

2014-04-15 17:03:00

2017-09-20 16:25:00

深度學習視覺領域計算機

2023-12-19 16:01:40

深度學習人工智能目標檢測

2025-01-13 10:00:00

2024-09-13 15:24:20

深度學習自動微分

2022-07-22 08:00:00

深度學習數據機器學習

2016-12-06 08:51:48

深度學習TensorFlow機器學習
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产蜜臀97一区二区三区 | 美女视频黄的免费 | 伊人最新网址 | 成人毛片在线观看 | 少妇精品亚洲一区二区成人 | 伊人影院99| 97日韩精品 | 国产91精品在线 | 欧美 日本 国产 | 日韩一区二区三区在线观看 | 国产亚洲一区二区三区在线观看 | 欧美舔穴 | 久久r免费视频 | 草草在线观看 | 日韩一级欧美一级 | 在线欧美一区 | 久草新在线 | 欧美在线激情 | 日韩精品一区二区三区 | 97高清国语自产拍 | 精品一区二区三区免费视频 | 国产区在线观看 | 亚洲视频一区在线播放 | 欧美视频xxx| 国产精品久久久av | 久久国产成人 | 91精品观看| 国产一区二区精 | 在线国产一区二区 | 狠狠影院 | 国产成人精品一区二区三区视频 | 毛片网站免费观看 | 黄色高清视频 | 久久91| 午夜视频一区二区 | 一级高清免费毛片 | 精品国产一区二区三区日日嗨 | 黑人性hd | 不卡一区二区在线观看 | www国产成人免费观看视频 | 岛国av免费在线观看 |