整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

基于深度学习的网络入侵检测方法研究

互联网已经成为人们日常生活中不可缺少的一部分,网络在带来便捷生活的的同时,由于网络安全问题日益突出,也给人们带来了严重困扰和焦虑。近年来频繁爆发的网络安全事件,给国家、企业和个人造成巨大的经济损失和不可弥补的灾难。检测是一种有效的网络安全防御技术,主要通过收集和分析网络数据,来识别入侵行为。传统的入侵检测方法大多是基于统计学、规则匹配等方法提出的,随着大数据时代的到来,面对海量且复杂的入侵数据,传统算法的检测率和效率都很低。针对网络攻击的多样性,如何提升入侵检测的性能是一大难题。本文针对网络入侵检测算法展开研究,具有重要的理论意义和实际应用价值。本文的主要工作如下:1)改进了传统的多层感知器入侵检测模型,该模型设计三种网络结构,通过调整隐含层的神经元个数,来匹配后续提出的两种多层感知器模型,经过实验来验证模型的最优网络结构;该模型引入Dropout和Batch ,明显提升了模型检测准确率;针对数据集特征维度过高,采用了主成分分析法进行特征降维,使之符合模型的数据输入;搭建两种网络模型来提高模型的收敛速度。实验表明:设计的网络模型相比其他算法模型具有更快的收敛性,大幅度提升了训练准确率,最高可达99.98%,测试准确率可达92%,模型的检测效率也更高。2)针对不平衡数据集出现的梯度消失问题,采用了基于卷积神经网络的入侵检测模型。该模型针对数据集的处理数据层面采用了过采样技术,对数据量进行缩减,算法层面采用了交叉熵损失函数;针对模型收敛速度加入了Adam优化器,实现梯度的快速下降;针对模型的整体性能加入了dropout,使模型性能更稳定。实验结果表明:设计的网络模型具备很好的特征学习能力,使用数据集检测,入侵检测测试准确率达到94%,进一步提升了检测准确率。在数据集上的实验表明,与传统的入侵检测模型相比,基于多层感知器和基于卷积神经网络的两种模型不仅提高了不同类别分类的准确率,还提高了检测准确率和检测效率,针对来自远程主机的未授权访问和未授权的本地超级用户特权访问两类攻击也有较好的检测率。同时,相比其他算法,两种模型的收敛速度更快。

如何使用Cron和PHP检测网页是否被篡改

这篇文章主要介绍“如何使用Cron和PHP检测网页是否被篡改”,在日常操作中,相信很多人在如何使用Cron和PHP检测网页是否被篡改问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Cron和PHP检测网页是否被篡改”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

网络安全一直是业界永恒的话题,人们一直在与黑客之间进行着从不间断的较量。那么作为普通的一个网站如何能用最简单的方法去防止自己的网页被篡改呢?或者至少在当自己的网页被篡改后能以最快的速度得知呢?在本文中,将介绍使用Cron和Php结合的方法,检查某些指定的网页是否被篡改。

这个方法的核心思路其实很简单:“创建一个简单的数据库,其中保存了需要保护的文件的hash值,并且采用unix的cron调度方法,定期检测实际文件的hash值和原始文件的hash值,并且形成报告。”

当然,其中要涉及递归遍历服务器文件目录下的大量文件,并且要计算它们的hash值,下面将具体讲解其过程。

数据库设计

我们先来看下数据库应该如何设计。为了安全起见,我们应该单独建立一个数据库以存放需要保护文件的。如果读者的网站是托管网站的话,建议使用cPanel去创建数据库并且使用强密码(比如可以用这个网站去产生各长度位数的密码,至少要8位以上)。我们将数据库命名为,表设计如下:

CREATE TABLE baseline (         file_path VARCHAR(200) NOT NULL,         file_hash CHAR(40) NOT NULL,         acct VARCHAR(40) NOT NULL         PRIMARY KEY (file_path)     );       CREATE TABLE tested (         tested DATETIME NOT NULL,         account VARCHAR(40) NOT NULL         PRIMARY KEY (tested)     );

在表中,包含了一个长度很大的字段,存放的是要保护文件的在服务器上的路径,而(用40位的长度去进行SHA1算法),而acct字段则表示是否监视账号还是域名。我们并将设置为主键。

而tested表中的tested字段则保存每次扫描的具体时间,而account字段和表的acct字段是相同的,以允许分别单独扫描账号还是域名。

定义PHP文件前的一些准备工作

接下来,我们为开发php文件做一些准备工作,首先要定义一些php文件中要用到的常量。

PATH。这个是要在你的服务器上进行扫描的起始路径,通常是指代。记得不要使用Windows中的反斜杠因为Apache和PHP都使用的是正向的斜杠。

网页修改检查里可以写什么_可以在检查里修改网页吗_网页修改检查里可以修改什么

访问数据库要涉及的地址,用户密码等参数,如SERVER(''),USER,

以及一些其他变量如下:

保存需要检查文件扩展名的数组。在这个例子中,只用数组保存了如.php、.htm和.js格式的文件。在本文中,如果使用了一个空的数组,则默认检查所有格式的文件(这是最安全的,但耗费不少资源)。

需要排除检查的目录。一般不建议这么做,如果确实需要不检查某个目录,则可以将其放置在本文中的一个数组中

此外还有几个参数需要设置,包括$file数组,初始化为空,$report初始化为空字符串以及$act字符串(配合数据表中的account/acct字段使用)。

开始编码

下面我们正式编码,先看如下代码:

mysqli_connect define('SERVER','localhost'); define('USER','your user name'); define('PASS','your password'); define('DATABASE','database name');  $db = mysqli_connect(SERVER,USER,PASS,DATABASE); $dir = new RecursiveDirectoryIterator(PATH); $iter = new RecursiveIteratorIterator($dir); while ($iter->valid()) {     //        忽略不需要检测的目录     if (!$iter->isDot() && !in_array($iter->getSubPath(), $skip))     {         // 获得指定要检测文件的扩展名         if (!emptyempty($ext))         {             //          PHP 5.3.4使用如下语句 if (in_array($iter->getExtension(), $ext))             if (in_array(pathinfo($iter->key(), PATHINFO_EXTENSION), $ext))             {                 $files[$iter->key()] = hash_file("sha1", $iter->key());             }         } else {             //          针对要忽略检查的文件             $files[$iter->key()] = hash_file("sha1", $iter->key());         }     }     $iter->next(); } ?>

下面我们来讲解下上面的代码。首先,使用的是php中的两个内置函数erator(获得指定目录下的所有文件和目录),然后进行循环遍历,并且检查每一个目录是否在需要排除检测的目录之中,如果包含在检测列表中的话同时检测是否有需要排除检测的文件。***将最终需要检测的文件放置在数组$files中,这个数组的键为文件的名称,而值则为经过SHA1算法运算后的哈希值。所以文件的数量可以马上通过以下方法获得

$report .= "Files has " . count($files) . " records.\r\n";

然后,我们要从tested表中,获得***一次经过哈希扫描的文件的时间,如下代码:

网页修改检查里可以写什么_网页修改检查里可以修改什么_可以在检查里修改网页吗

$results = mysqli_query($db,"SELECT tested FROM tested WHERE acct = '$acct'      ORDER BY tested DESC LIMIT 1"); if ($results) {     while($result=mysqli_fetch_array($results))     {         $tested = $result['tested'];     } $report .= "Last tested $tested.\r\n"; }

接下来,要对比的是经过hash扫描的文件的***hash值和原来表中的文件的哈希值是否有改变,使用的代码如下:

if (!emptyempty($files))  {     $result = mysqli_query($db,"SELECT * FROM baseline");     if (!emptyempty($result))      {         foreach ($result as $value)          {             $baseline[$value["file_path"]] = $value["file_hash"];         }         $diffs = array_diff_assoc($files, $baseline);         unset($baseline);     } } //  分别将不相同的部分保存到 Deleted, Altered 和 Added 数组 if (!emptyempty($files))  {     $results = mysqli_query($db,"SELECT file_path, file_hash FROM baseline WHERE acct = '$acct'");     if (!emptyempty($results))      {         $baseline = array();    //  from database         $diffs = array();       //  $files 和 $baseline数组的不同             while ($value = mysqli_fetch_array($results))         {             if (!array_key_exists($value["file_path"], $files))              {                 //  删除了的文件                 $diffs["Deleted"][$value["file_path"]] = $value["file_path"];                 $baseline[$value["file_path"]] = $value["file_hash"];             } else {                 //  改变过的文件                 if ($files[$value["file_path"]] <> $value["file_hash"])                  {                     $diffs["Altered"][$value["file_path"]] = $value["file_path"];                     $baseline[$value["file_path"]] = $value["file_path"];                 } else {                     //  没改变的文件                     $baseline[$value["file_path"]] = $value["file_hash"];                 }             }         }         if (count($baseline) < count($files))          {             //  增加的文件             $diffs["Added"] = array_diff_assoc($files, $baseline);         }         unset($baseline);     } }

当上面这段代码执行完毕后,$diffs数组或者是空的或者会包含改变了的文件(删除,修改,增加)和它们的哈希值。

然后我们可以将结果通过EMAIL发送给用户了。代码如下:

if (!emptyempty($diffs)) { $report .= "The following discrepancies were found:\r\n\r\n"; foreach ($diffs as $status => $affected)  {     if (is_array($affected) && !emptyempty($affected))      {         $report .= "* $status *\r\n\r\n";         foreach($affected as $path => $hash) $report .= " ?$path\r\n";     } } } else {     $report .= "File structure is intact.\r\n"; } $mailed = mail('you@example.com', $acct . ' Integrity Monitor Report',$report);

并且要更新表和tested表的数据,代码如下:

// 清除旧数据 mysqli_query($db,"DELETE FROM baseline WHERE acct = '$acct'"); //  将新文件和对应的hash值加入 foreach ($files as $path => $hash)  {     mysqli_query($db,"INSERT INTO baseline (file_path, file_hash, acct)          VALUES ('$path','$hash', '$acct')"); } mysqli_query($db,"INSERT INTO tested (tested, acct) VALUES (NOW(), '$acct')"); mysqli_close($db);

***,为了能让系统定时地执行这个php文件,可以充分利用unix中的cron任务计划,因此可以编写cron的文件如下:

/usr/local/bin/php -q /home/account/hashscan.php

其中,/usr/local/bin/php就是你服务器上php的路径,可以根据实际情况设置每天隔多久去检测一下服务器上的文件(这可以通过编写cron表达式去实现,关于如何编写cron表达式,读者可以参考相关的资料)。

到此,关于“如何使用Cron和PHP检测网页是否被篡改”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!