asp网站代码层面实现防cc攻击

  CC主要是用来攻击页面的.大家都有这样的经历,就是在访问论坛时,如果这个论坛比较大,访问的人比较多,打开页面的速度会比较慢,对不?!一般来说,访问的人越多,论坛的页面越多,数据库就越大,被访问的频率也越高,占用的系统资源也就相当可观,现在知道为什么很多空间服务商都说大家不要上传论坛,聊天室等东西了吧。


  一个静态页面不需要服务器多少资源,甚至可以说直接从内存中读出来发给你就可以了,但是论坛就不一样了,我看一个帖子,系统需要到数据库中判断我是否有读读帖子的权限,如果有,就读出帖子里面的内容,显示出来--这里至少访问了2次数据库,如果数据库的体积有200MB大小,系统很可能就要在这200MB大小的数据空间搜索一遍,这需要多少的CPU资源和时间?如果我是查找一个关键字,那么时间更加可观,因为前面的搜索可以限定在一个很小的范围内,比如用户权限只查用户表,帖子内容只查帖子表,而且查到就可以马上停止查询,而搜索肯定会对所有的数据进行一次判断,消耗的时间是相当的大。
  CC就是充分利用了这个特点,模拟多个用户(多少线程就是多少用户)不停的进行访问(访问那些需要大量数据操作,就是需要大量CPU时间的页面)。很多朋友问到,为什么要使用代理呢?因为代理可以有效地隐藏自己的身份,也可以绕开所有的防火墙,因为基本上所有的防火墙都会检测并发的TCP/IP连接数目,超过一定数目一定频率就会被认为是Connection-Flood。
  使用代理攻击还能很好的保持连接,我们这里发送了数据,代理帮我们转发给对方服务器,我们就可以马上断开,代理还会继续保持着和对方连接(我知道的记录是有人利用2000个代理产生了35万并发连接)。
  可能很多朋友还不能很好的理解,我来描述一下吧.我们假设服务器A对Search.asp的处理时间需要0.01S(多线程只是时间分割,对结论没有影响),也就是说他一秒可以保证100个用户的Search请求,服务器允许的最大连接时间为60s,那么我们使用CC模拟120个用户并发连接,那么经过1分钟,服务器的被请求了7200次,处理了6000次,于是剩下了1200个并发连接没有被处理.有的朋友会说:丢连接!丢连接!问题是服务器是按先来后到的顺序丢的,这1200个是在最后10秒的时候发起的,想丢?!还早,经过计算,服务器满负开始丢连接的时候,应该是有7200个并发连接存在队列,然后服务器开始120个/秒的丢连接,我们发动的连接也是120个/秒,服务器永远有处理不完的连接,服务器的CPU 100%并长时间保持,然后丢连接的60秒服务器也判断处理不过来了,新的连接也处理不了,这样服务器达到了超级繁忙状态。
  当然,CC也可以利用这里方法对FTP进行攻击,也可以实现TCP-FLOOD,这些都是经过测试有效的。
  防范方法
  说了攻击原理,大家肯定会问,那么怎么防御?使用硬件防火墙我不知道如何防范,除非你完全屏蔽页面访问,我的方法是通过页面的编写实现防御。
  1. 使用Cookie认证.这时候朋友说CC里面也允许Cookie,但是这里的Cookie是所有连接都使用的,所以启用IP+Cookie认证就可以了。
  2. 利用Session.这个判断比Cookie更加方便,不光可以IP认证,还可以防刷新模式,在页面里判断刷新,是刷新就不让它访问,没有刷新符号给它刷新符号.给些示范代码吧,Session:
  程序代码:
  〈%
  if session("refresh")〈〉 1 then
  Session("refresh")=session("refresh")+1
  Response.redirect "index.asp"
  End if
  %〉
  这样用户第一次访问会使得Refresh=1,第二次访问,正常,第三次,不让他访问了,认为是刷新,可以加上一个时间参数,让多少时间允许访问,这样就限制了耗时间的页面的访问,对正常客户几乎没有什么影响。
  3. 通过代理发送的HTTP_X_FORWARDED_FOR变量来判断使用代理攻击机器的真实IP,这招完全可以找到发动攻击的人,当然,不是所有的代理服务器都发送,但是有很多代理都发送这个参数.详细代码:
  程序代码:
  〈%
  Dim fsoObject
  Dim tsObject
  dim file
  if Request.ServerVariables("HTTP_X_FORWARDED_FOR")="" then
  response.write "无代理访问"
  response.end
  end if
  Set fsoObject = Server.CreateObject("Scripting.FileSystemObject")
  file = server.mappath("CCLog.txt")
  if not fsoObject.fileexists(file) then
  fsoObject.createtextfile file,true,false
  end if
  set tsObject = fsoObject.OpenTextFile(file,8)
  tsObject.Writeline Request.ServerVariables("HTTP_X_FORWARDED_FOR")
  &"["Request.ServerVariables("REMOTE_ADDR")&"]"&now()
  Set fsoObject = Nothing
  Set tsObject = Nothing
  response.write "有代理访问"
  %〉
  这样会生成CCLog.txt,它的记录格式是:真实IP [代理的IP] 时间,看看哪个真实IP出现的次数多,就知道是谁在攻击了.将这个代码做成Conn.asp文件,替代那些连接数据库的文件,这样所有的数据库请求就连接到这个文件上,然后马上就能发现攻击的人。
  4. 还有一个方法就是把需要对数据查询的语句做在Redirect后面,让对方必须先访问一个判断页面,然后Redirect过去。
  5. 在存在多站的服务器上,严格限制每一个站允许的IP连接数和CPU使用时间,这是一个很有效的方法。
  CC的防御要从代码做起,其实一个好的页面代码都应该注意这些东西,还有SQL注入,不光是一个入侵工具,更是一个DDOS缺口,大家都应该在代码中注意.举个例子吧,某服务器,开动了5000线的CC攻击,没有一点反应,因为它所有的访问数据库请求都必须一个随机参数在Session里面,全是静态页面,没有效果.突然发现它有一个请求会和外面的服务器联系获得,需要较长的时间,而且没有什么认证,开800线攻击,服务器马上满负荷了。
  代码层的防御需要从点点滴滴做起,一个脚本代码的错误,可能带来的是整个站的影响,甚至是整个服务器的影响,慎之!
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/300019.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【攻防世界】Reverse——secret-galaxy-300 writeup

由main函数查看相关代码,但是代码中并没有直接的关于flag的信息: int __cdecl main(int argc, const char **argv, const char **envp) {__main();fill_starbase(&starbase);print_starbase((int)&starbase);return 0; } void __cdecl fill_sta…

【Docker基础三】Docker安装Redis

下载镜像 根据自己需要下载指定版本镜像,所有版本看这:Index of /releases/ (redis.io) 或 https://hub.docker.com/_/redis # 下载指定版本redis镜像 docker pull redis:7.2.0 # 查看镜像是否下载成功 docker images 创建挂载目录 # 宿主机上创建挂…

一些数字设计及验证的笔试题(6)

一些数字设计及验证的笔试题汇总,仅供参考。 文章目录 一、什么是亚稳态?如何改善? 二、C语言下列关系符号中,优先级最低的是哪个? 三、下面哪种不属于Vim编辑器的工作模式? 四、在以下的哪个timescale…

(21)Linux的文件描述符输出重定向

一、文件描述符 1、文件描述符的底层理解 在上一章中,我们已经把 fd 的基本原理搞清楚了,知道了 fd 的值为什么是 0,1,2,3,4,5... 也知道了 fd 为什么默认从 3 开始,而不是从 0,1,2,因为其在内核中属于进程和文件的对应关系。 …

如何才能成长为一个架构师?

很多技术小伙伴都在问我,架构师是不是很牛逼,那么为什么自己不能成长为一名优秀的架构师呢?而总是作为工程师资源被项目打包带走,并周而复始的完成领导的业务开发需求任务。 架构师的工作职责? 为了方便技术小伙伴理…

nodejs 不用 electron 实现打开文件资源管理器并选择文件

前言 最近在开发一些小脚本,用 nodejs 实现。其中很多功能需要选择一个/多个文件,或者是选择一个文件夹。 最初的实现是手动输入一个目录(这个只是一个普通的终端文本输入,所以按下 tab 没有路径提示),非…

说反话-加强版

主要&#xff1a;使用strtok函数&#xff08;将字符串以空格分开&#xff09;&#xff08;若不了解strtok函数&#xff0c;我在其它文章已说明&#xff09; #include <stdio.h> #include <string.h> int main() { int i 0; int z 0; char* str[5000…

测试组合生成器-allpairspy

1、前言 在我们写功能用例时&#xff0c;常常会遇到多个参数有很多的选项&#xff0c;而如果想把这些参数值都要覆盖执行的话&#xff0c;工作量可想而知。那有没有什么办法既可以减少用例数量&#xff0c;也可以保证用例质量又降低测试时间成本&#xff0c;本篇将介绍一款工具…

强化学习的数学原理学习笔记 - 时序差分学习(Temporal Difference)

文章目录 概览&#xff1a;RL方法分类时序差分学习&#xff08;Temporal Difference&#xff0c;TD&#xff09;TD for state valuesBasic TD&#x1f7e1;TD vs. MC &#x1f7e6;Sarsa (TD for action values)Basic Sarsa变体1&#xff1a;Expected Sarsa变体2&#xff1a;n-…

Halcon区域的最大、最小灰度值min_max _gray

Halcon区域的最大、最小灰度值 除了可以使用gray_features算子提取区域中的最大与最小灰度值外&#xff0c;还可以使用min_max gray 算子计算区域的最大与最小灰度值&#xff0c;区别是后者更具灵活性。min_maxgray 算子的原理是基于灰度直方图&#xff0c;取波峰和谷底之间的…

学习笔记——C++运算符之比较运算符

作用&#xff1a;用于表达式的比较&#xff0c;并返回一个真值或假值 比较运算符有以下符号&#xff1a; #include<bits/stdc.h> using namespace std; int main(){//int a10;int b20;cout<<(ab)<<endl;//0//!cout<<(a!b)<<endl;//1//>cout&…

行走在深度学习的幻觉中:问题缘由与解决方案

如何解决大模型的「幻觉」问题&#xff1f; 我们在使用深度学习大模型如LLM&#xff08;Large Language Models&#xff09;时&#xff0c;可能会遇到一种被称为“幻觉”的现象。没错&#xff0c;它并不是人脑中的错觉&#xff0c;而是模型对特定模式的过度依赖&#xff0c;这…

【Docker-Dev】Mac M2 搭建docker的redis环境

Redis的dev环境docker搭建 1、前言2、官方文档重点信息提取2.1、创建redis实例2.2、使用自己的redis.conf文件。 3、单机版redis搭建4、redis集群版4.1、一些验证4.2、一些问题 结语 1、前言 本文主要针对M2下&#xff0c;相应进行开发环境搭建&#xff0c;然后做一个文档记录…

美食管理与推荐系统Python+Django网站系统+协同过滤推荐算法【计算机课设】

一、介绍 美食管理与推荐系统。本系统使用Python作为主要开发语言开发的一个美食管理推荐网站平台。 网站前端界面采用HTML、CSS、BootStrap等技术搭建界面。后端采用Django框架处理用户的逻辑请求&#xff0c;并将用户的相关行为数据保存在数据库中。通过Ajax技术实现前后端的…

Linux之Shell编程

shell是什么 shell是一个命令行解释器&#xff0c;他为用户提供一个向linux内核发送请求以便运行程序的界面系统级程序&#xff0c;用户可以用shell来启动&#xff0c;挂起&#xff0c;停止甚至编写一些程序。 shell脚本的执行方式 脚本格式要求 脚本以#!/bin/bash开头脚本需…

JavaScript基础(24)_dom查询练习(一)

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><link rel"stylesheet" href"../browser_default_style/reset.css"><title>dom查询练习一</title><style>.text {widt…

JS手写apply,call,bind函数

本篇文章咱们来手写简易版的apply&#xff0c;call&#xff0c;bind函数。 实现思路 首先咱们需要思考下这三个函数放到哪里比较合适&#xff0c;因为这三个函数是被函数对象调用的&#xff0c;并且每个函数都可以调用&#xff0c;所以不难想到有一个位置非常合适&#xff0c;…

解决Docker报错问题:Docker Desktop – Unexpected WSL error

最近因为准备在NAS上通过Docker容器方式安装MYSQL&#xff0c;发现https://hub.docker.com网站被墙了&#xff0c;无法自动安装&#xff0c;同时又找不到靠谱的离线镜像&#xff0c;所以准备在Window上安装Docker&#xff0c;通过电脑的网络代理制作离线镜像再上传到NAS上。 在…

媒体捕捉-iOS自定义二维码扫描功能

引言 随着iOS 7引入AV Foundation框架&#xff0c;二维码扫描功能已经成为iOS应用程序中不可或缺的一部分。现今&#xff0c;几乎每个应用都充分利用这一功能&#xff0c;为用户提供了诸如扫码登录、扫码填充等丰富多彩的便捷体验。这项技术不仅丰富了应用功能&#xff0c;也为…

校园-智慧门禁(卡码脸)解决方案

前言 入职新公司也已经一年有余&#xff0c;入职后主要从事的是门禁项目&#xff0c;公司设计的项目是偏saas化的智慧门禁系统&#xff0c;目前已经在多所大学上线&#xff0c;以下是对该项目的个人总结复盘。 一、系统主要功能和扩展功能 可实现学校统一门禁设备管理可实现人…