当前位置: 首页 > 科技观察

谈Web安全:如何防御常见的网络攻击?

时间:2023-03-21 10:49:58 科技观察

Web安全是一个很大的话题,在网络安全事件中,针对Web的攻击是最多的。从一些html标签,到JS代码安全问题,再到接口、数据库、流量攻击、模拟请求、自动化攻击等等,很多很多。本文简单说一下常见的网络攻击防御方法。1.DDOSDDOS是最常见也是最难防御的。目前还没有人敢说它可以完全防御DDOS。DDoS是流量攻击。由于DDoS攻击往往采用合法的数据请求技术,再加上傀儡机,DDoS攻击成为最难防御的网络攻击之一。基本防御方法:1.对频繁请求的ip和接口进行流量限制,熔断处理,必须输入图形验证码次数大于多少次。验证过程可以减轻服务器数据库的处理压力。其实现在很多大公司都会把下面的接口放在一个项目中进行rpc远程调用处理。通过分布式缓存、分布式一致性问题、分布式事务来解决这些问题。2、使用黑白名单机制防御攻击(OAuth2.0协议)。这是推荐的。这个黑名单和白名单是现在很多代理网站给你处理网站的安全,也算是替你保卫了网站。3、选择高防数据中心:国内数据中心一般都有防火墙防御。今天我们把防火墙分为两种:集群防御,单线机房防御一般:10G-32G集群防御,BGP多线机房一般:10G以内的集群防火墙。独立防御,独立防御发生在单线机房,或者多线多ip机房。机房的防御能力一般在10G到200G之间。这种机房是单机防御能力。随着数据中心防御能力的提升,加上竞争压力比较大,高防御的价格也在不断创新低。4、CDN内容分发:CDN防御方式:CDN技术的初衷是提高互联网用户访问网站的速度,但由于分布式多节点的特点,也可以起到稀释分布式拒绝的作用的攻击流量。所以现在的CDN防御方式不仅可以起到防御的作用,而且用户的访问请求都是到最近的缓存节点,所以也起到了很好的提速作用。CDN防御最重要的原理是:通过智能DNS,将不同地点的流量分发到相应地点的节点上,使区域内的节点成为流量的接收中心,从而起到稀释流量的作用。将流量稀释到各个节点后,可以对各个节点进行流量清洗。从而起到防御作用。CDN防御在目前针对DDOS流量攻击的防御方式中也分为自建CDN防御。这种情况下防御能力更好,但是成本高,需要部署多个节点,需要租用每个节点服务器。浪费。另一种是租用别人现成的CDN防御,可以大大节省成本,而且防御能力很少很好。2.CSRF攻击?"src="http://p1.pstatp.com/large/pgc-image/fa44e1ad5feb47d38bd60f015948de25"width="531"height="466">CSRF是:2007年的跨站请求伪造(Cross-SiteDomainRequestForgery)曾被列为2010年20大互联网安全隐患之一,又称“OneClickAttack”或SessionRiding,通常简称为CSRF或XSRF,是一种恶意利用网站的行为,又称钓鱼网站。虽然听起来像跨站脚本攻击(XSS),它与XSS有很大的不同,其攻击方式几乎相反。XSS利用站点内的受信任用户,而CSRF通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不太流行,所以防范的资源相当稀少,所以被认为比XSS更危险,换句话说,大量请求到你的接口,通过抓包工具请求分析,伪造token来访问您的界面,攻击服务器以减少服务器数据库的性能。如何防御CSRF?这里还是要说一下分布式模拟请求。毕竟,我们确实需要使用分布式和缓存集群。解决限流、服务容错和断路器问题。1.后端防御:(1)MVCC方案多版本并发控制,该策略主要使用updatewithcondition(updatewithconditiontoprevent)保证多个外部请求调用对系统的影响是一致的。在在系统设计的过程中,合理使用乐观锁,使用版本或者updateTime(时间戳)等其他条件来做乐观锁的判断条件,保证即使在并发的情况下更新操作也不会过大(2)去重表插入数据时,插入去重表,利用数据库的唯一索引特性,保证逻辑唯一。(3)悲观锁selectforupdate,在整个执行过程中锁住order对应的记录。注意:当DB读大于写时尽量少用这个。(4oken机制,防止重复提交页面,通过限流把token放在redis中,每个token只能使用一次,网络延时或者重试机制解决了这个问题。(5)MQ消息中间件也可以解决这个问题,消息通知处理可以通过发布和订阅来完成。(6)nginx服务器拦截处理域名网关,只能通过域名访问,无法获取你的ip,所以前台文件通过分离实现。(7)分布式标定经验在大型网站中,使用Session来存储CSRFToken会带来很大的压力,访问单个服务器session也是如此。但是在如今的大型网站中,我们通常有多个服务器,可能有几十个甚至几十个几台电脑有上百台之多,甚至可能有多个机房在不同的省份,用户发起的HTTP请求通常要经过Ngnix之类的负载均衡器,然后才被路由到特定的服务器。由于Session默认保存在单个服务器的内存中,因此在分布式环境中,同一用户发送的多个HTTP请求可能会依次落在不同的服务器上,导致后续的HTTP请求无法获取到Session数据通过之前的HTTP请求保存在服务器中,从而使得Session机制在分布式环境下失效,所以在分布式集群中需要将CSRFToken保存在Redis等公共存储空间中。由于使用了Session存储,读取和验证CSRFToken会带来比较大的复杂度和性能问题。目前很多网站都采用加密令牌模式的方式。该方法的Token是计算出来的结果,不是随机生成的字符串。这样验证时就不需要读取存储的Token了,只需要重新计算即可。这种Token的值通常是使用UserID、时间戳和随机数加密生成的。这样既可以保证分布式服务的Token一致,又可以保证Token不易被破解。token解密成功后,服务器端可以访问解析值,会使用Token中包含的UserID和timestamp来验证合法性,将UserID与当前登录的UserID进行比较,将timestamp与当前进行比较时间。2.前台防御:(1)CSRF监控对于一个比较复杂的网站系统,很有可能某些项目、页面、接口漏掉了CSRF防护措施。一旦发生CSRF攻击,我们如何及时发现这些攻击?(其实这里nginx也可以处理)CSRF攻击有一个明显的特点:跨域请求。GET类型请求头的MIME类型很可能是图片,但实际返回的头的MIME类型是Text、JSON、HTML。(2)通过对称和非对称算法,前端网站访问先访问后端获取签名,然后将前端请求的参数拿到后端进行校验。一般情况下,网络上的接口支付是重定向的。这个一般比较麻烦。但是这个安全性能很高,其实ssl证书比域名还贵。(3)使用双cookie防御CSRF的优点:无需使用Session,应用更广泛,易于实现。Token存放在客户端,不会对服务端造成压力。相比Token,实现成本更低,并且可以在前后端统一拦截验证,不需要一个一个增加接口和页面。缺点:额外的字段被添加到cookie中。如果存在其他漏洞(比如XSS),攻击者可以注入cookie,那么这种防御方式就会失效。很难隔离子域。为了保证cookie传输的安全,最好使用这种防御方式,保证整个站点使用HTTPS。如果不使用HTTPS,这种方式也会有风险。3.SQL注入攻击?"src="http://p1.pstatp.com/large/pgc-image/e5ee0de9b60e46d3a0cbe6bf2d5ca70c"width="640"height="308">SQL注入:利用现有应用向后台注入恶意SQL命令,对数据库执行SQL注入的原因是程序没有对用户的输入进行有效的过滤,使得攻击者成功向服务器提交恶意的SQL查询代码,程序收到后错误地将攻击者的输入作为查询语句.部分执行,导致原有的查询逻辑被改变,额外执行攻击者精心构造的恶意代码。SQL注入漏洞可能影响任何使用SQL数据库(如MySQL、Oracle、SQLServer或others)program.犯罪分子可能会利用它来未经授权访问用户的敏感数据:客户信息、个人数据、商业机密、知识产权等。SQL注入攻击是最古老、最流行和最危险的Web应用程序漏洞之一。1.SQL注入攻击的类型SQL注入攻击可以通过多种方式执行。攻击者可能会在选择特定的攻击方法之前观察系统的行为。(1)In-bandinjection这是一种典型的攻击,攻击者可以通过相同的通信通道发起攻击并获得结果。这是通过两种带内技术完成的:基于错误的SQL注入:从显示的错误消息中获取有关数据库的信息基于联合的SQL注入:依赖于攻击者能够将所有被盗信息的结果与合法结果连接起来.这两种技术都依赖于攻击者修改应用程序发送的SQL,以及浏览器中显示和返回的错误信息。如果应用程序开发人员或数据库开发人员未能正确参数化他们在查询中使用的值,它将成功。两者都是可以检测到错误的试错法。(2)盲注也称为推理SQL注入,盲注攻击不直接从目标数据库泄露数据;相反,攻击者会仔细检查行为中的间接线索。HTTP响应的详细信息、某些用户输入的空白??网页以及数据库响应某些用户输入所需的时间都可以作为线索,具体取决于攻击者的目标。他们还可以指向另一个SQLi攻击途径供攻击者尝试。(3)Out-of-bandinjection这种攻击有点复杂,当攻击者无法在单个直接查询-响应攻击中实现其目标时,可能会使用它们。通常,攻击者会制作SQL语句,当这些语句出现在数据库中时,会触发数据库系统创建与攻击者控制的外部服务器的连接。通过这种方式,攻击者可以收集数据或可能控制数据库的行为。二阶注入是一种带外注入攻击。在这种情况下,攻击者将提供SQL注入,该注入将由数据库系统的单独行为存储和执行。当次级系统行为发生时(它可能是基于时间的作业或由其他典型的管理员或用户使用数据库触发的东西)并执行攻击者的SQL注入,这就是“接触”系统攻击者控制的时候发生。2.如何防御SQL注入(1)规范sql的写法,不要写拼接的sql,最好使用预编译的方式。mybatis写sql语句的时候,最好用?传参方式,不要使用#Passparameter,因为#传参方式可能会被SQL语句攻击。#{}:ParsedasaJDBCprecompiledstatement(preparedstatement)参数标记,#{}被解析为参数占位符,可以防止SQL注入问题。${}:仅针对纯字符串替换,变量替换会在动态SQL解析阶段进行。(2)限制数据库权限和特权将数据库用户权限设置为所需的最低限度;这将限制攻击者在尝试获得访问权限时可以做什么。避免直接向用户显示数据库错误,攻击者可以利用这些错误来获取有关数据库的信息。为访问数据库的Web应用程序使用Web应用程序防火墙(WAF)。事实上,不仅仅是SQL注入,本文提到的几乎所有攻击都可以通过WAF进行防护。WAF有很多种,有硬件的、软件的、云的,有昂贵的商用WAF硬件,也有免费+商用的WAF软件(比如:ShareWAF,很好。)。这为面向Web的应用程序提供了保护,并且可以帮助识别SQL注入尝试;根据设置,它还可以帮助防止SQL注入尝试到达应用程序(以及数据库)。(3)定期测试与数据库交互的网络应用程序。这样做可以帮助捕获可能允许SQL注入的新错误或回归。将数据库更新到最新的可用补丁,这可以防止攻击者利用旧版本中存在的已知弱点/错误。(4)后台日志分析sql可以使用AOP截取写sql性能4.防盗、防盗链是指A网站有图片,B网站需要引用它才能使用自己的网站,参考图片和styles、js等如何防御?写一个过滤器,判断http请求头Referer字段中记录源的值。如果与当前访问的域名不一致,说明图片可能被其他服务器盗用了。通过动静分离或者前后端分离。通过nginx配置。链接重定向可以通过shiro权限判断。五、XSS攻击?"src="http://p1.pstatp.com/large/pgc-image/462a088e47794987900c15426e341921"width="640"height="285">Xss是javascript脚本攻击,就是提交表单时的小脚本是提交的,因为浏览器默认支持脚本,写个小脚本不处理会是个大问题,网页不处理就会挂掉,如何防御?后台写个filter拦截所有getParameter参数,重写httpsservletwrapp方法.通过tools类将参数的特殊字符转换成html源码保存。通过js检查过滤用户输入检查用户输入的内容是否有非法内容。如<>(尖括号)、"(引号)、'(单引号)、%(百分号)、;(分号)、()(括号)、&(&符号)、+(加号)、etc.6.严格控制输出6.文件上传漏洞1.什么是文件上传漏洞?上传漏洞顾名思义就是攻击者通过上传木马文件的方式直接获取WEBSHELL,这个漏洞产生的原因是就是代码的作者没有对访问者提交的数据进行检查过滤,可以直接提交修改后的数据绕过插件的检查,人们经常在网上下载文件什么的,比如一个软件。十几M,但是下载下来只有几百Kb,很多网站都是钓鱼网站,你下载的文件后缀是.exe文件,这是系统运行文件,文件下载也有这个问题,不要乱下载文件2.如何解决防御?对于文件格式的限制,只有一定的允许上传格式以验证文件格式。Content_Type等)防止上传目录在项目目录外,作为静态资源文件路径,并设置文件的权限,禁止文件下的执行权限。通过文件流分析判断文件类型。7.忘记密码?我这里分析一个常见的qq漏洞。现在很多人还是盗用别人的密码,然后通过qq发信息,让你借钱或者转账到某个地方。验证码,如果是4位纯数字,你可以想象),然后盗取你的短信验证码登录。如果是QQ,你会一直发送短信验证码,它会花点时间联系客服,因为大家都知道QQ验证码是4位的,所以很容易被别人破解。我这里说的都是真实案例,因为我之前也被别人这样操作过,但是一直都是频繁的发短信验证码然后找回。开始了。如何防范:如果忘记密码,验证码应为6-8位数字,最好是字符和字母的组合。一旦接口被频繁调用验证,应使用图形验证码进行拦截,防止机器模拟。使用黑白名单机制,防御攻击(OAuth2.0协议)。