联系方式

详细 +

> 企业在线QQ

> 代理咨询QQ

> 咨询热线

手机棋牌游戏如何抵御外挂和恶意攻击?

来源:新闻中心 发布于:2018-01-09 11:22

  手机棋牌游戏如何抵御外挂和恶意攻击?

        看点01

  DDoS(注意,o要小写)

  DDoS 只是流量攻击的一个总体称呼,直接百度 DDoS 就可以获得答案。 一般个人攻击者可以发起 50G ~ 100G 的流量攻击。 一些团队可以发起 200G+ 的流量攻击,当然还有一些可以做到 400G+、600G+、800G+、1T+等。

  在这里首先要说明的是,从理论上而言,DDoS是防不住的。 你今天能防住1T,明天别人就可能打你2T。

  但好在,现实并没有那么走运,攻击也是有代价的。 因此,如果遇上600G、800G,甚至是1T的瞬间流量攻击,我觉得你可以发一个朋友圈,说明你已经走上了人生巅峰。

 

  唯一的解决方案:硬防。所谓硬防,就是指硬件防御。

  基本原理就是在自己的机房入口设备,比如路由器上,通过分析包的类别、源地址特征来进行 DDoS 识别。 一但识别源地址为 DDoS 行为,就更改数据包地址,将其引导到流量清洗设备上。

  从上面的原理中可以看出,机房的流量清洗设备能够吞下来的流量,就是你的最高防御上限。

   机房有两种

  一种是 BGP 机房 ,这种机房是多线合一,对外只提供一个 IP。 防御一般是 200G 的单台上限。 如果想要更多的防御,就要和业务商谈,业务好为你的主机重新布线。

  另一种就是普通的机房。 这种机房 ,也是多网通,不过,电信、网通、教育网之类会有单独的 IP,这种的防御可以做到 300G 左右。 同样的,想要更高,就只有业务商谈后,专门为你处理。

  多个 IP,如何提供给客户端呢?最好的策略就是智能 DNS 域名解析,它会帮你解析到适合当前用户的 IP。

  总结一个字:钱!

  如果我们想要防御上 T 的攻击,曾经咨询过一个第三方机房,大概是 10 万一个月。 对于一些月流水上千万的游戏来说,这个数字无所谓。但对于起步阶段的平台来说,就是天价了。 那我们有没有办法少花点钱呢?

  大家首先想到的就是分布式了。 没错的,能够想到这个的,都是杰出少年,哈哈!

  如果我们用 4 台 300G 高防的并联,自然就是 1.2T 的防御。 除非 4 台同时被打死, 否则我们还是有余地的。

  细心的朋友就会问了,4 台,就有 4 个 IP 地址。如何来做呢?其实这个就交给客户端好了。如果客户端掉线了,就遍历 4 个地址,选择一台可以用的来用就是了。

  这 4 台,不见得要负载均衡。 因为我们要的是保证玩家在受攻击的时候,有可用的服务器可用,而不是要通过负载均衡来提升承载。 什么? 你的平台同时有几万人在线?那好办, 你用 10 台 1T 防御的做网关就好了。

  看点02

  CC(伪造数据包)

  DDoS 常见的套路有几种:

  1、发起超多长链接(针对长链接服务器),侵占服务器 IO 资源

  2、发起超多数据包(长短链接都可用)

  3、伪造数据包( CC)

  前面两种比较好防御,因为高防服务器自动就可以识别。 实际上,成本最低、伤害最大的,要算 CC 攻击。

  CC 攻击主要的套路有几种

  1、抓包重放

  通过软件抓取客户端向服务器发送的合法流量包,然后无脑的多次发送。 比如,我们抓一条拉取游戏历史记录的信息,然后无脑发送。 大家应该能够想到,可能存在的情况。

  一、如果历史记录是从数据库中实时统计。那么会使数据库服务器的查询和流量溢出。 常见的就是 MYSQL 等数据库进程 100%

  二、如果历史记录是缓存到内存中的,那么至少也会产生放大攻击效果。 放大的倍数就是返回包大小 / 请求包大小。重放攻击的防御手段,大家可以自行百度了,选择一个适合自己的方案即可。

  2、SQL注入

  SQL 注入很简单,我演示一下。 SELECT * FROM history WHERE userid = $userid. 假如,这个 $userid 是由客户端传过来的,那么我们面临的问题就是这个 $userid 可能不是你期望的整型。

  比如可能出现下面的情况(加粗的部分就是 $userid 的值)

  SELECT * FROM history WHERE userid = 12346 or 0 union select concat_ws("|",cast(orderid as char),ifnull(operator,""),ifnull(target,""),cast(ifnull(num,0) as char),cast(ifnull(time,0) as char),ifnull(note,""),cast(id as char),ifnull(account,""),cast(ifnull(goods_type,0) as char),cast(ifnull(goods_num,0) as char),cast(ifnull(goods_price,0) as char),cast(ifnull(price_type,0) as char),cast(ifnull(time,0) as char)),1,2 from t_log limit 0,1 -- "

  这条 SQL 语句调用了 N 个 concat_ws,cast,ifnull 等 SQL 函数。试图消耗 MYSQL 数据库进程的 CPU 以及产生大量的查询结果返回。

  SQL 注入的防御,需要大家做好客户端传入的值的效验,特别是拼接 SQL 语句的时候,要格外注意可能出现的问题。

  3、破解

  破解意味着攻击方知道你所有的业务逻辑,这是最难防御的。 但大家应该假设这样的可能出现,因为在高手面前,我们的加密,混淆几乎等于 0。

  要想防御到这一步,就只有合理的规划好代码,每一个请求都严格效验。