《大型分布式网站架构设计与实践》——常见的Web攻击手段

news/2024/5/20 14:52:22/文章来源:https://blog.csdn.net/benhuo931115/article/details/77220866

常见的Web攻击手段

XSS攻击

跨站脚本攻击(Cross Site Scripting),指的是攻击者在网页中嵌入恶意脚本程序,当用户打开该网页时,脚本程序便开始在客户端的浏览器上执行,以盗取客户端cookie、用户名密码,下载执行病毒木马程序,甚至是获取客户端admin权限等

<img fen_015>

防范: 对用户输入的数据进行HTML转义处理

转义前转义后
<&lt ;
>&gt ;
&amp ;
&quot ;

CSRF攻击

跨站请求伪造(cross site request forgery),是一种对网站的恶意利用,XSS利用的是站点内的信任用户,而CSRF则是通过伪装来自受信任用户的请求来利用受信任的网站,可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求,CRSF能做的事情包括利用你的身份发邮件、发短信、进行交易转账等,甚至盗取你的账号

攻击原理如下图所示

<img_018>

防范:

  • 将cookie设置为HttpOnly

    CRSF攻击很大程度上是利用了浏览器的cookie,为了防止站内的XSS漏洞盗取cookie,需要在cookie中设置”HttpOnly”属性,这样通过程序(如JavaScript脚本、Applet等)就无法读取到cookie信息,避免了攻击者伪造cookie的情况出现

    在Java的Servlet的API中设置cookie为HttpOnly的代码如下

    response.setHeader("Set-Cookie", "cookiename=cookievalue;HttpOnly");
    
  • 增加token

    CSRF攻击之所以能够成功,是因为攻击者可以伪造用户的请求,该请求中所有的用户验证信息都存在于cookie中,因此攻击者可以在不知道用户验证信息的情况下直接利用用户的cookie来通过安全验证。由此可知,抵御CSRF攻击的关键在于:在请求中放入攻击者所不能伪造的信息,并且该信息不存在于cookie之中,鉴于此,系统开发人员可以在HTTP请求中以参数的形式加入一个随机产生的token,并在服务端进行token校验,如果请求中没有token或者token内容不正确,则认为是CSRF攻击而拒绝该请求

    假设请求通过POST方式提交,则可以在相应的表单中增加一个隐藏域:

    <input type="hidden" name="_token" value="tokenvalue">
    

    token的值通过服务端生成,表单提交后token的值通过POST请求与参数一同带到服务端,每次会话可以使用相同的token,会话过期,则token失效,攻击者因无法获取到token,也就无法伪造请求

    在session中添加token的实现代码

    HttpSession session = request.getSession();
    Object token = session.getAttribute("_token");
    if(token == null || "".equals(token)){session.setAttribute("_token", UUID.randomUUID().toString());
    }
    
  • 通过Referer识别

    在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址,在通常情况下, 访问一个安全受限的页面的请求都来自于同一个网站,如果攻击者要对第三方网站实施CSRF攻击,他只能在其他网站构造请求,当用户通过其他网站发送请求到第三方网站时,只需要对请求验证其Referer值即可

    取得HTTP请求Referer

    String referer = request.getHeader("Referer");
    

SQL注入攻击

通过把SQL命令伪装成正常的HTTP请求参数,传递到服务端,欺骗服务器最终执行恶意的SQL命令,达到入侵目的

防范:

  • 使用预编译语句

    预编译SQL语句中的特殊字符会被转义

  • 避免免密码明文存放

    不用明文存储密码,使用哈希加盐法(Hash+Salt),能够在一定程度上解决使用彩虹表的破解方法(逆向或碰撞串),所谓加盐(Salt)就是在生成Hash时给予一个扰动,使Hash值与标准的Hash结果不同,如密码是”hello”,加一个盐,也就是随机字符串”abcdefgids”,两者合到一起,计算MD5,通过这种操作, 即便用户用的是弱密码,也能通过加盐,使实际计算哈希的密码值变成一个长字符串,一定程度上防御了穷举攻击和彩虹表攻击

  • 处理好相应的异常

    处理好后台的系统异常,重定向到相应的错误处理页面

文件上传漏洞

文件上传攻击指的是恶意攻击者利用一些站点没有对文件的类型做很好的校验,上传了可执行的文件或者脚本,并且通过脚本获得服务器上相应的权力,或者是通过诱导外部用户访问、下载上传的病毒或木马文件,达到攻击的目的

防范:

  • 对上传的文件类型进行白名单(非黑名单)校验,并且限制上传文件的大小,上传的文件需要进行重命名,使攻击者无法猜测到上传文件的访问路径
  • 不能简单地通过后缀名称来判断文件的类型,因为恶意攻击可以将可执行文件的后缀名改成图片或者其他后缀类型。因为很多类型的文件,起始的几个字节内容是固定的,因此,根据这几个字节的内容,就可以确定文件类型,这几个字节也被称为魔数(magic number)

    1.通过魔数来判断文件类型

    public enum FileType{JPEG("FFD8FF"),PNG("89504E47"),GIF("47494638"),TIFF("49492A00"),BMP("424D"),DWG("41433130"),PSD("38425053"),XML("3C3F786D6C"),HTML("68746D6C3E"),PDF("255044462D312E"),ZIP("504B0304"),RAR("52617221"),WAV("57415645"),AVI("41564920"),private String value = "";private FileType(String value){this.value = value;}public String getValue(){return value;}public void setValue(String value){this.value = value;}}/***读取文件头**/private static String getFileHeader(String filePath) throws IOException {//这里需要注意的是,每个文件的魔数的长度都不相同,因此需要使用startwithbyte[] b = new byte[28];InputStream is = null;is = new FileInputStream(filePath);is.read(b, 0, 28);is.close();return bytes2hex(b);}/***判断文件类型*/public static FileType getType(String filePath) throws IOException {String fileHead = getFileHeader(filePath);if(fileHead == null || fileHead.length() == 0){return null;}fileHead = fileHead.toUpperCase();FileType[] fileTypes = FileType.values();for(FileType type : fileTypes){if(fileHead.startsWith(type.getValue())){return type;}}return null;}
    

    对于图片类型的文件,可以在上传后,对图片进行相应的缩放,破坏恶意用户上传的二进制可执行文件的结构,来避免恶意代码执行

    imagemagick是一套功能强大、稳定并且开源的针对图片处理的开发工具包,能够处理多种格式的图片文件,可以利用imagemagick来对图片进行缩放处理

DDoS攻击

DDoS(Distributed Denial of Service)即分布式拒绝服务攻击,是目前最为强大、最难以防御的攻击方式之一

最基本的DoS攻击就是利用合理的客户端请求来占用过多的服务器资源,从而使合法用户无法得到服务器的响应,DDoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击方式,传统的DoS攻击一般是采用一对一的方式,当攻击目标的CPU速度、内存或者网络带宽等各项性能指标不高的情况下,它的效果是明显的,但随着计算机与网络技术的发展,计算机的处理能力显著增加,内存不断增大,同时也出现了千兆级别的网络,这使得DoS攻击逐渐失去了效果

DDoS指的是攻击者借助公共网络,将数量庞大的计算机设备联合起来作为攻击平台,对一个或多个目标发动攻击,从而达到瘫痪目标主机的目的,通常在攻击开始前,攻击者会提前控制大量的用户计算机,称之为”肉鸡”,并通过指令使大量的肉鸡在同一时刻对某个主机进行访问,从而达到瘫痪目标主机的目的

常见的DDoS攻击手段:

  • SYN Flood

    SYN Flood是互联网最经典的攻击方式之一,它利用了TCP协议三次握手过程

    <img fen_019>

    TCP协议为实现可靠传输,在三次握手的过程中设置了一些异常处理机制,如果服务器没有收到客户端的ACK报文,服务端一般会进行重试,也就是再次发送SYN+ACK报文给客户端,并且一直处于SYN_RECV状态,将客户端加入等待列表。重发一般会进行3~5次,大约每隔30秒左右会轮询一遍等待队列,重试所有客户端;另一方面,服务器在发出SYN+ACK报文后,会预分配一部分资源给即将建立的TCP连接,这个资源在等待重试期间一直保留,更为重要的是,服务器资源有限,可以维护的等待列表超过极限后就不再接收新的SYN报文,也就是拒绝建立新的TCP连接

    SYN Flood正是利用了TCP协议三次握手的过程来达到攻击的目的,攻击者伪造大量的IP地址给服务器发送SYN报文,但是由于伪造的IP地址几乎不可能存在,也就不可能从客户端得到任何回应,服务端将维护一个非常大的半连接等待列表,并且不断对这个列表中的IP地址进行遍历和重试,占用了大量的系统资源,更为严重的是,由于服务器资源有限,大量的恶意客户端信息占满了服务器的等待队列,导致服务器不再接收新的SYN请求,正常用户无法完成三次握手与服务器进行通信,这便是SYN Flood攻击

  • DNS Query Flood

    DNS Query Flood实际上是UDP Flood攻击的一种变形,由于DNS服务在互联网中具有不可替代的作用,一旦DNS服务器瘫痪,影响甚大

    DNS Query Flood攻击采用的方法是向被攻击的服务器发送海量的域名解析请求,通常, 请求解析的域名是随机生成的,大部分根本不存在,并且通过伪造端口和客户端IP,防止查询请求被ACL(访问控制列表)过滤,被攻击的DNS服务器在接收到域名解析请求后,首先会在服务器上查找是否有对应的缓存,由于域名是随机生成的,几乎不可能有相应的缓存信息,当没有缓存,且该域名无法直接由该DNS服务器进行解析时,DNS服务器会向其上层DNS服务器递归查询域名信息,直到全球互联网的13台根DNS服务器。大量不存在的域名解析请求给服务器带来了很大的负载,当解析请求超过一定量时,就会造成DNS服务器解析域名超时,这样攻击者便达成了攻击目的

  • CC攻击

    CC(Challenge Collapsar)攻击属于DDoS的一种,是基于应用层HTTP协议发起的DDoS攻击,也被称为HTTP Flood

    CC攻击的原理是:攻击者通过控制的大量”肉鸡”或者利用从互联网上搜寻的大量匿名的HTTP代理,模拟正常用户给网站发起请求直到该网站拒绝服务为止,大部分网站会通过CDN以及分布式缓存来加快服务端响应,提升网站的吞吐量,而这些精心构造的HTTP请求往往有意避开这些缓存,需要进行多次DB查询操作或者一次请求返回大量的数据,加速系统资源消耗,从而拖垮后端的业务处理系统,甚至连相关存储与日志收集系统也无法幸免

其他攻击手段

其他比较常见的攻击手段还有DNS域名劫持、CDN回源攻击、服务器权限提升、缓冲区溢出,以及一些依赖于平台或者具体软件漏洞的攻击等

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

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

相关文章

《大型网站技术架构:核心原理与案例分析》——大型网站架构演化过程

大型网站软件系统的特点 高并发&#xff0c;大流量高可用海量数据用户分布广泛&#xff0c;网络情况复杂安全环境恶劣需求快速变更&#xff0c;发布频繁渐进式发展 大型网站架构演化发展历程 初始阶段的网站架构 LinuxPHPApacheMySQL 应用服务和数据服务分离 演化原因 一…

用户行为分析大数据系统(实时统计每个分类被点击的次数,实时计算商品销售额,统计网站PV、UV )

Spark Streaming实战对论坛网站动态行为pv&#xff0c;uv&#xff0c;注册人数&#xff0c;跳出率的多维度分析_小强签名设计 的博客-CSDN博客_spark streaming uv 实时统计每天pv,uv的sparkStreaming结合redis结果存入mysql供前端展示 实时统计每天pv,uv的sparkStreaming结合…

机器学习(三)-- KNN(K近邻分类算法)、电影分类、改进约会网站的配对效果

决策树< 朴素贝叶斯< KNN K近邻算法&#xff1a;根据距离来做排序&#xff0c;距离哪些同类的数据比较近则属于哪一类 &#xff08;1&#xff09;从计算结果直观上来看&#xff0c;在这三种算法中&#xff0c;KNN算法的计算准确率普遍较高&#xff0c;且kNN算法在训练数…

【大型分布式网站】抗住千万流量的大型分布式系统架构设计

一、大型分布式网站架构技术 1.1 大型网站的特点 用户多&#xff0c;分布广泛 大流量&#xff0c;高并发 海量数据&#xff0c;服务高可用 安全环境恶劣&#xff0c;易受网络攻击 功能多&#xff0c;变更快&#xff0c;频繁发布 从小到大&#xff0c;渐进发展 以用户为中…

基于服务器的个人博客网站搭建

网站搭建 目录 网站搭建 A1 基础 A2 域名 2.1 域名解析 2.2 添加记录 2.2 域名备案 A3 ECS云服务器搭建博客 3.1 安全组添加8888端口 3.2 安装宝塔 3.3 访问网站&#xff0c;登录宝塔 3.4 安装wordpress 3.5 配置wordpress 3.6 进入后台 A4 问题 4.1 关于访问公…

网站备案后没有找到站点

A1 问题&#xff1a; A2 原因&#xff1a; 您没有将此域名或IP绑定到对应站点!配置文件未生效! A3 解决&#xff1a; 检查是否已经绑定到对应站点&#xff0c;若确认已绑定&#xff0c;请尝试重载Web服务&#xff08;大部分是这个问题&#xff0c;添加对应站点和开放端口&am…

linux一键卸载安装脚本,在使用LANMP Linux一键包卸载安装网站服务器要注意的事情...

前言之前在某个论坛里看到了一个关于Nginx如何限制并发的问题&#xff0c;也知道一些朋友也对博客做了一些访问限制(各种什么Js验证、cookie验证&#xff0c;还加了个Fail2ban什么的)然后觉得自己的博客很稳&#xff0c;恩&#xff0c;可能&#xff0c;也许&#xff0c;大概………

个人网站www.pixysoft.net设计系列: 数据库同步的思考

个人网站www.pixysoft.net设计系列: 数据库同步的思考Introduction:本网站使用WebService进行远程网站管理.因此有数据同步的问题表结构设计 说明:网站管理分为本地数据库(如上图设计)和网站数据库. 通过本地数据库管理网站数据库..SiteMapContent保存导航文件.WebPageInfo保存…

使用Web标准建站

使用Web标准建站第1天:选择什么样的DOCTYPE 前言 大家好&#xff01;这个系列文章是按阿捷自己制作这个站点的过程编写的。之前阿捷也一直没有制作过一个真正符合web标准的网站。现在边参考国外资料边制作&#xff0c;同时把过程中的心得和经验记录下来&#xff0c;希望对大家有…

一步一步SharePoint 2007之二十一:解决实现注册用户后,自动具备访问网站的权限的问题(3)——创建用户...

摘要  本篇文章将记录如何解决实现注册用户后&#xff0c;自动具备访问网站的权限的第三部分。   前面各项准备工作都做完了&#xff0c;现在我们就来进行解决实现注册用户后&#xff0c;自动具备访问网站的权限的最后一步设置吧&#xff01;正文  下面将记录每一步的实现…

[电子商务网站设计] 之 Passport

从所承担的功能上来说&#xff0c;Passport 是一个系统级别的服务&#xff0c;而不仅仅用来进行用户管理。对于任何一个网站而言&#xff0c;随着业务的发展&#xff0c;多业务的网站群整合不可避免&#xff0c;那么作为整合的通道之一&#xff0c;用户数据共享自然就是一个关键…

[CSS]30种时尚的CSS网站导航条

【原文地址】&#xff1a;http://coolshell.cn/?p562 我想&#xff0c;大家在上网的时候一定见过很多很多种各式各样的网站导航条的设计。这些导航条基本上来说都是用CSS来做的。这里&#xff0c;我们将向你介绍几种最不错的用CSS设计的网站导航条。希望你会喜欢。 1. The Men…

用python爬取网页内容_用python爬取网页文本内容,让你快速浏览网站内容

大家好&#xff0c;我是咿哑呀。今天我教大家学习网络爬虫&#xff0c;这个爬虫能够爬取网页文本内容&#xff0c;提高大家浏览网页的速度。下面我把代码贴出&#xff0c;大家仔细研究&#xff1a;from urllib import request, parsefrom urllib.parse import quoteimport stri…

python语言的主要网站是_TIOBE:2018年度编程语言 Python八年后重登王座

2003-2018 年度最佳编程语言&#xff1a;可以看到&#xff0c;Python 上一次获得此荣誉&#xff0c;是在 2010 年。 其他值得关注的变化还有&#xff1a; MATLAB —— 从第 18 名升至第 11 名 Kotlin —— 从第 39 名升至第 31 名 Rust —— 从第 46 名升至第 33 名 Julia ——…

网站变成灰色

昨天是4月4日清明节&#xff0c;全国都在为抗击疫情&#xff08;新冠肺炎&#xff09;做斗争牺牲的烈士和逝世的同胞哀悼&#xff0c;各大网站都会让自己的网站的全部网页变成灰色&#xff08;黑白色&#xff09;&#xff0c;以表示我们对逝者的悼念。当然&#xff0c;今天已经…

网站企业信息查询

1. 站长工具 2. 爱站网 3. ICP备案查询 4. 公安备案查询 5. 企业查询 站长工具中的【星网大数据】 全国组织机构统一社会信用代码公示查询平台 爱企查 天眼查

web developer tips (84):在Visual Web Developer中设置web网站的起始页

原文地址&#xff1a;How to set a Start page for your Web Site in Visual Web Developer? 如果你正在开发网站&#xff0c;为了测试网站你想启动某个特定的网页。默认的情况下&#xff0c;当你启动调试的时候&#xff0c;Visual Studio 2008运行的页面是设计器中当前激活的…

ajax nginx 转发 sessionid_教你快速使用nginx部署网站

前言如果服务器只需要放置一个网站程序&#xff0c;解析网站到服务器的网站&#xff0c;网站程序监听80端口就可以了。如果服务器有很多应用&#xff0c;借助nginx不仅可以实现端口的代理&#xff0c;还可以实现负载均衡。本文将详细介绍前端及nodeJS项目在服务器配置时需要用到…

谈谈互动型网站中垃圾贴的应对方案

在互动型网站中常常会受到垃圾贴的困扰。我分享一点个人在垃圾贴处理方面的一点心得&#xff1a; 要处理垃圾贴必然需要分析垃圾贴的特征1. 在内容上垃圾贴通常会带有一个固定域名的外部链接&#xff0c;或者带有QQ号码&#xff0c;手机号码&#xff0c;或者重复内容&#xff1…

python爬虫登录网站_Python爬虫模拟登录带验证码网站

爬取网站时经常会遇到需要登录的问题&#xff0c;这是就需要用到模拟登录的相关方法。python提供了强大的url库&#xff0c;想做到这个并不难。这里以登录学校教务系统为例&#xff0c;做一个简单的例子。 首先得明白cookie的作用&#xff0c;cookie是某些网站为了辨别用户身份…