Using CNN to identify SQL and XSS

栏目: 数据库 · 发布时间: 8年前

内容简介:来篇正式点的Post吧我觉得CNN算法就其本身而言,应用与NLP是没有问题的。但是这个检测率应该可以再提升一点。

来篇正式点的Post吧

燃燃燃然

前言

最近在FreeBUF上看到这样一篇文章

基于卷积神经网络的 SQL 注入检测

我觉得CNN算法就其本身而言,应用与NLP是没有问题的。

但是这个检测率应该可以再提升一点。

因为SQL,XSS的注入方法,就语法上而言,比NLP要简单一些。

还可以用C写一个检测程序。

这样就更容易让这个模型跑在实际的环境。

而且,样本在送检之前,首先做了循环解码,再做归一化处理。

循环解码是需要的,但是归一化处理不一样。

安全性不论,每条数据先要跑正则再送检,这个效率要比传统的正则匹配法低一些。

那么,让我在巨人的肩膀上,再做一些小改进。

理论

对于通过CNN来做NLP处理的论文,国内外都可以找到很多。

大致的原理是这样:

Using CNN to identify SQL and XSS

句子->词向量->卷积层->池化层->链接层

简单的说,就是把句子内的词转化为词向量,后面接单层的CNN。

训练数据

首先,我们需要训练集,对照集,检测集 这个可以用github的一些数据。这里,就使用前一文中提到的数据集来检测。

首先,循环读取每一条数据,对每条数据循环解码,打上标签,最后存档。

这里的UrlDecode()完成循环解码的功能。

for each_line in sql_file:
    str=UrlDecode(each_line)
    f.writelines('sql' + '\t' + str + '\n')
    count += 1
print("sql end at %d" % count)

对于训练集的第一条数据

1%29%20AND%205628%3D4794

经过改写后,变成这样

sql	1)and5628=4794

全部改写完成后,就可以用之前提到的模型训练了

整个训练在6次迭代后完成。 这个是tensorboard的损失图像。

Using CNN to identify SQL and XSS

最后使用test集,可以达到99%以上的检测率。

混淆矩阵也很好看。

检测

之前说过,我们需要让这个模型能应用于实际的生产中。

那么,结合Tensorflow的C库,来写一个检测程序。

关于Tensorflow C库的使用,有很多现有的例子,就不多写了。

大致的流程是这样

int main(int argc, char* argv[])
{
    if (argc < 2) return 1;

    // pre load
    tf_model_t* model = LoadTFModel("./tf_model.pb");
    FillTensor(argv[1]);

    printf("Model Returns: %d\n", RunTFModel(model));

    FreeTFModel(model);
    return 0;
}

这样,就完成了使用C来检测注入的目标。

如果是需要重复的使用,可以在系统启动时调用LoadTFModel(),检测时只需调用FillTensor()和RunTFModel()即可。

可以省略掉加载的时间。

不用时调用FreeTFModel()清空资源。

如果需要看下单次处理的速度之类。

在FillTensor()和RunTFModel()之间加个循环,前后记录时间,转double除一下就可以。

我在i7-2700上跑了50万次,平均不到100微秒。

大致1秒1万-2万多次的样子。

有时间调调参,或者使用GPU的话应该会更高。

结语

撸猫撸猫


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

REST in Practice

REST in Practice

Jim Webber、Savas Parastatidis、Ian Robinson / O'Reilly Media / 2010-9-24 / USD 44.99

Why don't typical enterprise projects go as smoothly as projects you develop for the Web? Does the REST architectural style really present a viable alternative for building distributed systems and ent......一起来看看 《REST in Practice》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具