网页防篡改系统原理


1. 外挂轮询技术

外挂轮询技术是利用一个网页检测程序,以轮询方式读出要监控的网页,与真实网页相比较,来判断网页内容的完整性,对于被篡改的网页进行报警和恢复。

主要优点:实现、部署简单

主要弱点:在网站大的情况下,网页数量巨大,扫描一遍的时间太长,占用系统大量资源。

2. 核心内嵌技术

核心内嵌技术是将篡改检测模块内嵌在Web服务器软件里,它在每一个网页流出时都进行完整性检查,对于篡改网页进行实时访问阻断,并予以报警和恢复。

主要优点:仅对流出web服务器的页面进行检查,使得被篡改的页面完全没有被浏览者看到的可能。

主要缺点:在访问页面时会必须经过处理,会消耗点资源。

3. 事件触发技术

事件触发技术是利用操作系统的文件系统接口,在网页文件的被修改时进行合法性检查,对于非法操作进行报警和恢复。

主要优点:从根本上对非法篡改进行阻止。

主要缺点:如果攻击者完全非法控制主机,那么这种技术就没有作用了。

 

ISAPI筛选器是微软针对IIS提供的专用API,提供了对IIS 的纵向扩充功能。ISAPI筛选器和HTTP 服务器运行在同一地址空间,并且可以访问可由HTTP 服务器使用的所有资源。ISAPI筛选器随IIS启动而加载,客户机的每个HTTP请求都会导致筛选器执行,并且IIS处理HTTP请求的各个阶段都会产生一个通知,从而调用筛选器处理相应事件。我们的防篡改检测就是一个ISAPI 筛选器。

 

下面是我的一个实例。先说下配置:

将过滤器生成的DLL文件放在一个文件夹下。将SQLite3.dll和数据库文件(.db)放在过滤器的文件夹下面。

 

DWORD CDataSendDemoFilter::OnSendRawData(CHttpFilterContext* pCtxt,
 PHTTP_FILTER_RAW_DATA pRawData)
{
 // TODO: React to this notification accordingly and
 // return the appropriate status code
 /*TRACE("CMyex34bFilter::OnReadRawData\n");
 char buffer[100];
 memset(buffer,0,sizeof(buffer));
 sprintf(buffer,"ASDGJKLLL");
 DWORD len = strlen(buffer);
 //数据写在URL对应的数据的前面
 pRawData->pvInData = buffer;
 pCtxt->WriteClient(buffer,&len,0);
 pRawData->cbInData = 0; */   //将发送的数据设置为零
 //得到相应的URL 然后在去核查里面的内容是否匹配 最后再去处理
 
 sqlite3 *db = 0;
 char *pErrMsg = 0;
 sqlite3_stmt *stmt = NULL;
 int ret = 0;
 char stderr1[100];  //记录错误的信息
 ret = sqlite3_open("C:\\ASPISAPI\\security.db",&db); //打开数据库成功了
 DWORD len;
 //char sql[100] = "select * from fileattr where filename = 'magic.html';";
 if (ret != SQLITE_OK)
 {
  sprintf(stderr1,"无法打开数据库");
  len = strlen(stderr1);
  pCtxt->WriteClient(stderr1,&len,0);
  pRawData->cbInData = 0;
  return SF_STATUS_REQ_NEXT_NOTIFICATION;
 }
 else
 {
  char Message[100];
  sprintf(Message,"我就是我");
  DWORD Messlen = strlen(Message);
  pCtxt->WriteClient(Message,&Messlen,0);   //向客户端发送一串数据

  ret = sqlite3_prepare(db,"select * from fileattr where filename = 'magic.html';" , -1, &stmt,0);
  if(ret != SQLITE_OK)
  {
   char Message[100];
   sprintf(Message,"select * from fileattr where filename = 'magic.html'; 出现了错误");
   DWORD Messlen = strlen(Message);
   pCtxt->WriteClient(Message,&Messlen,0);   //向客户端发送一串数据
   pRawData->cbInData = 0;
   return SF_STATUS_REQ_NEXT_NOTIFICATION;
  }
 // int rc = sqlite3_step(stmt);
  while (SQLITE_ROW == sqlite3_step(stmt))
  {
   CString filename = sqlite3_column_text(stmt,0);
   CString filetext = sqlite3_column_text(stmt,1);
   int times = sqlite3_column_int(stmt,2);

   char buffer1[100];
   sprintf(buffer1,"文件名:%s 文件内容:%s 被篡改的次数:%d",filename,filetext,times);
   len = strlen(buffer1);
   pCtxt ->WriteClient(buffer1,&len,0);
   pRawData->cbInData = 0;
   //rc = =sqlite3_step(stmt);
   break;
  }

  sqlite3_finalize(stmt); // 释放sqlite3_stmt 
  sqlite3_close(db);      //这段代码查询id号大于5的所有记录,并显示到控制台,最后效果为


  
  return SF_STATUS_REQ_NEXT_NOTIFICATION;
 }


 
 return SF_STATUS_REQ_NEXT_NOTIFICATION;
}

 

这个例子实现了从数据库中取出数据,然后将其显示在HTML文件中。

 

下一个例子我会将md5加密算法给出。目的是将网页加密的密文和水印表中的密文进行匹配。如果匹配不成功,则说明有人篡改了HTML文件。此时可以将备份的HTML文件覆盖之前发布的HTML文件。这样就起到了安全的作用。

 

有什么地方说的不准确的希望广大网友给与指出!谢

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值