一个游戏的好与否是不是决定在苹果id忘记安全问题题上?

网页游戏上不去是不是安全卫士设置错误
全部答案(共1个回答)
插件不完整,你可以试着重新安装浏览器。爱健祝你愉快!
你好,你用工具箱登陆游戏,进入后会有提示更新数据等的更新完就OK了,我也是这样弄得s,若是我的回答对您有用,麻烦您点击下方的“有用”,如若还有疑问,您可以继续追...
没网络链接,或者 这个网站停了,或者你的网址打错了。 可能你的网站是真的停了。
360 人工服务 里面有修复这种情况
如果是IE出现的脚本错误,你试试下面的方法,如果是玩游戏时经常出现,可能是游戏软件或网站的问题,卸载游戏重装试试。
打开IE选工具/Internet选项/高...
请打开360安全卫士,高级工具里的LSP修复进行修复即可。 如果不行请打开控制面板的网络连接,设置为自动获取IP。 如果还是不行建议尝试自动修复网络,右键桌面右...
#九龙王子酒店#上面显示的就是房费吗 担保是什么
答: 朋友相处要严以律己,宽以待人。
朋友出去玩,AA制最好。如果不是,自己要抢先付钱,不要斤斤计较。你就是不坐船也要抢先付钱才对。
意欲取之,必先予之。其实朋友...
答: 清理一下网页缓存。希望对你有帮助。
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415后使用快捷导航没有帐号?
查看: 16276|回复: 35
UID7493777最后登录积分90注册时间精华0主题帖子金币66 威望0 历史贡献0
勤奋好学, 积分 90, 距离下一级还需 60 积分
6月26号,也就是昨天,我还玩了一天,今天早上起床到现在,莫名其妙,开TGP,就一直卡在游戏环境安全检测上,重启,重新安装,以及系统全部从新做了,还是这样。
我就想知道了,非得做这么一个整合了QQ所有客户端类游戏的一个工具么?
早年我也使用,从最早的DNF双开,连发,到后期的LOL,人家什么都做在你们前面,什么都做的比较好,为什么?
你们的技术实力比不过人家么? 你们的资金投入没有人家多?还是你们团队的实力水平过与低下呢?还是故意送人头,给敌方放水呢?
恐怕都不是吧。
你们自己太高估你们自己了,你们不断的在给TGP增肥,从单一的某一游戏工具,不断的增肥到万能所有游戏的辅助工具,妄图以一个工具来拟补所有你们游戏的不足,是不是太贪心了一些?
对于我们根本不玩你们别的游戏的人来说,是不是你们增加的**文件太多了?
先不说开TGP以后,电脑本身的压力,以及系统占有率,就说说你们这个工具的本身,稳定性都保证不了,你们还整那么些功能有什么用?
哪个是你们独创的阿,全是跟着人后面添加功能,没有一个功能说实话是领先在前面的。
如果不是用别的第三方工具封LOL的号,说实话,你们的**TGP根本不会有太多的人选择。
要点脸吧,**团队们。
本帖子中包含更多资源
才可以下载或查看,没有帐号?
UID最后登录积分20注册时间精华0主题帖子金币18 威望0 历史贡献0
初学乍到, 积分 20, 距离下一级还需 30 积分
楼主表示我也是这样,能不能快点修复啊!!!
UID最后登录积分10注册时间精华0主题帖子金币7 威望0 历史贡献0
初学乍到, 积分 10, 距离下一级还需 40 积分
坑爹!!!!!!!!!!!!
UID3651656最后登录积分112注册时间精华0主题帖子金币128 威望0 历史贡献12
勤奋好学, 积分 112, 距离下一级还需 38 积分
UID最后登录积分20注册时间精华0主题帖子金币6 威望0 历史贡献0
初学乍到, 积分 20, 距离下一级还需 30 积分
醉了,醉了,现在不能用了,什么都干不了,有意思么。
UID最后登录积分385注册时间精华0主题帖子金币673 威望0 历史贡献0
我也是这样,根本进不去
UID最后登录积分25注册时间精华0主题帖子金币32 威望0 历史贡献0
初学乍到, 积分 25, 距离下一级还需 25 积分
傻 **玩家版主只会复制黏贴让你官网下载线最新版,P用没有,来 ,玩家版主先死个全家
UID最后登录积分20注册时间精华0主题帖子金币6 威望0 历史贡献0
初学乍到, 积分 20, 距离下一级还需 30 积分
丫的,每次上线就自动更新。
UID610714最后登录积分275注册时间精华0主题帖子金币352 威望0 历史贡献10
游学四方, 积分 275, 距离下一级还需 325 积分
早上还能用的 刚才突然就不行了&&
UID4150661最后登录积分60注册时间精华0主题帖子金币813 威望0 历史贡献0
勤奋好学, 积分 60, 距离下一级还需 90 积分
我也是这样啊~~~~
UID最后登录积分10注册时间精华0主题帖子金币13 威望0 历史贡献0
初学乍到, 积分 10, 距离下一级还需 40 积分
估计这回开发组组长得下课了
UID最后登录积分20注册时间精华0主题帖子金币6 威望0 历史贡献0
初学乍到, 积分 20, 距离下一级还需 30 积分
有办法,耐心等吧,等着等着就进去了,现在就只有这办法了,朋友们加油!
UID最后登录积分20注册时间精华0主题帖子金币6 威望0 历史贡献0
初学乍到, 积分 20, 距离下一级还需 30 积分
我慢慢等就进去了
UID5784799最后登录积分62095注册时间精华0主题帖子金币15930 威望0 历史贡献0
终成名角, 积分 62095, 距离下一级还需 17905 积分
已反馈这个问题,还请大家耐心等待进程。发生这种情况我们很抱歉。
待跟进的玩家请将QQ验证改为【需要验证信息】模式。
UID最后登录积分5注册时间精华0主题帖子金币3 威望0 历史贡献0
初学乍到, 积分 5, 距离下一级还需 45 积分
最好把所有问题都特么修复!! 擦
UID最后登录积分5注册时间精华0主题帖子金币5 威望0 历史贡献0
初学乍到, 积分 5, 距离下一级还需 45 积分
我还以为就我自己这样呢 好郁闷啊
UID最后登录积分5注册时间精华0主题帖子金币9 威望0 历史贡献0
初学乍到, 积分 5, 距离下一级还需 45 积分
我差点重装系统
UID9318884最后登录积分55注册时间精华0主题帖子金币30 威望0 历史贡献0
重启几次了也这样,真心烦
UID最后登录积分15注册时间精华0主题帖子金币35 威望0 历史贡献0
我也是这样
UID最后登录积分10注册时间精华0主题帖子金币4 威望0 历史贡献0
初学乍到, 积分 10, 距离下一级还需 40 积分
&&本来以为只有我是这样,看来兄弟姐妹都出这个问题了。望尽快修复··············
TGP核心成员
长期对TGP助手优化而不断努力,或多次提出建设性意见
Powered by你所在的位置: >
安全小游戏大全
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
【安全小游戏专题】
专题介绍:7399小游戏为您提供最新最全【安全】小游戏在线免费玩,还有各类安全小游戏下载,最新的安全小游戏排行榜,更多好玩的小游戏尽在7399游戏大全!
人气:916717人气:217223人气:133712人气:120799人气:108122人气:98197人气:93205人气:69045人气:66737人气:56224人气:53198人气:44881人气:41436人气:38544人气:34076人气:32473人气:31491人气:30114人气:28766人气:27201人气:26680人气:24762人气:24092人气:23929人气:21169人气:20867人气:19611人气:19277人气:18120人气:17934人气:17874人气:16915人气:15382人气:15317人气:15027人气:14693人气:14110人气:12907人气:12771人气:12444人气:12310人气:12221人气:11997人气:11465人气:11264人气:11195人气:10560人气:10332人气:10250人气:9805人气:9505人气:9459人气:9337人气:9332人气:9034人气:8784
第 1 页第 2 页第 3 页第 4 页第 5 页第 6 页第 7 页第 8 页第 9 页第 10 页第 11 页第 12 页第 13 页第 14 页第 15 页第 16 页第 17 页第 18 页安全、道德、体制 一场“黑金门”引发的问题思考
_17173游戏博客
安全、道德、体制 一场“黑金门”引发的问题思考
原文地址:
&  最近几天,一场浩浩荡荡的口舌之争以迅雷不及掩耳之势迅速在网络传播,“黑金门”――这个令人厌恶的名词将永久载入艾泽拉斯历史史册,而那几位自称品德高尚的“黑金”男子将永远成为魔兽世界里的耻辱。
  一场四人与四万人的对决
  “黑金”这个原本只以为在政界才发生的现象,其实也早已在游戏界频频出现,只是历来的那些黑金事件未能引起民愤,黑金主角没有如此之猖狂,我们才任其得过且过。然而,当这几个黑金男子不但不认错反而调戏起受害者时,富有正义感的魔兽玩家群起而攻之,别说用武器,四万人的口水都足以将这四人淹没。有玩家甚至还说游戏中解决不了的问题,要在现实中给以反击,欲对这四人进行人肉搜索,让其接受现实惩处,显然这一说法太过激进,毕竟网易已经对“黑金门”事件主角进行了永久封号。
  “黑金门”将历来游戏中的黑金事件推至顶峰,折射出了游戏中的安全问题、道德问题以及体制问题等等,游戏玩家的愤怒、相关部门的不给力也在这次“门”事件很好地体现出来。事实证明,团结就是力量,游戏玩家们在正义感中携手打击罪恶分子,也使得相关部门作出了相应的举措。
  而作为玩家的我们,是不是也对此次“黑金门”所折射出的各种问题异常熟悉呢?安全、道德、体制问题几乎每时每刻围绕在我们身边,我们又怎能不熟悉呢?
  “黑金门”折射出的各种问题
  正义玩家们的齐心协力使得这次“黑金门”主角受到了应有惩罚,然而黑金现象由来已久――这使得我们不得不去关注游戏里存在的问题,这些问题同现实世界中的各种问题有着惊人的类似,游戏账号、金币安全隐患与现实食品、财产安全隐患,游戏玩家道德素质低下与现实人们德行太差,游戏相关部门的无视与现实相关部门的漠视等,令我们不禁感叹,究竟哪里才是安全、适合人类居住的地方?
  安全问题
  游戏安全问题自网络游戏出现的那一天就存在,就好比人类自诞生之日起各种安全问题同样存在一样,有些我们无法避免,比如天灾、比如意外,然而当人为所造成的安全问题频繁出现在这个世界的时候,我们不得不做沉重思考:这个世界究竟怎么了?
  陪伴多年的游戏帐号,突然被盗了,找回来之后,上面所有值钱的装备全部不见,我们只能认栽。可却还有玩家帐号被盗之后,竟还遇到盗窃贼公然挑衅的现象,亲爱的盗窃者,你们有如此技术为何沦落到如此地步啊?高高兴兴地与人组团打金,突然团长收完钱掉线了,同样认栽。可近日的“黑金门”受害者还遭到卑劣小人的公然调戏,亲爱的黑金小伙,你们有如此才华怎么不去政界混个一官半职啊?
  现实中的安全问题更不用多说,由玩家调侃说:“咱平时喝的是三聚氰胺牛奶,吃的是染色馒头毒大米,品的是地沟油,买的是化妆猪,火锅熬的是苏丹红毒花椒,烫的是毒血旺和福尔马林毛肚……”,现实中的食品安全问题由此可见一斑。而财产安全、人生安全问题同样令人揪心,说不定哪天在路上碰见李刚儿子或者药家鑫的车,我同样认栽!
  道德问题
  说起道德,这本该不是我等所该谈及的问题,小时候的课本《思想品德》早就教过,或许是因为那些人智商太低或者老师太差没能教好,导致这些人成为今日我们该斥责的对象!盗窃可耻,这应该是人人都懂的道理,为何到游戏中就变得如此随便呢?黑金、盗号难道就不是偷?虚拟世界监管制度的缺陷使得这些盗窃者更加肆无忌惮,品尝到偷的快感之后并未得到相应的惩治,使得他们嗜偷成性,并恬不知耻:“我们是普通人,不懂道德;黑金就是被封嘛,一个星期就搞定了;我玩这个游戏就是图爽快,我想黑就黑!”
  黑金者如此厚颜无耻的行径的确令人汗颜,我们虽然不敢肯定现实生活中他们同样是个盗窃贼,但可以肯定的是他们绝对不是个品德高尚的人。有玩家称,他们黑金黑装备可以忍,但是做了坏事还如此理直气壮,简直是在挑战国服玩家的道德底线。你说多年以后他们会不会因为当年的卑劣行径而羞愧呢?
  说起道德问题,我还不得不批判下现实生活中的一些后生小辈们,近日几位中学生强暴一位女同学的视频在网上疯传,而当事人至今仍未报案,你说这些孩子脑袋里装的都是些什么?而教育体制对于当今频繁存在的道德问题,有着不可推卸的责任!
  体制问题
  尽管网易已经封停这次“黑金门”的相关帐号,并进行了永久性冻结,依然是治标不治本,如果这些帐号是被盗来的,岂不是会真正地失去了一批玩家?而关于此次封号,还有玩家发出质疑声:自网易自九城手中接手《魔兽世界》后,也曾数次对该游戏进行整顿、封号,然而不管是技术还是力度上都输于九城,不但造成玩家怨声载道,而且黑金事件依旧猖獗,这不管对游戏本身还是玩家都是一种伤害。
  现实生活中同样如此,不到事故闹到世人皆知,很少会有人为你解决问题的,食品安全问题就是如此,三聚氰胺牛奶的屡禁不止,热色馒头毒豆芽的再次侵袭,令人揪心万分。
  安全问题、道德问题的频繁出现,肯定是现在体制中的某个环节出现了严重问题,缺乏相应的监管机制或者实施力度的不到位使得这些盗窃者、问题少年有恃无恐。黑金现象、帐号安全隐患存在多年,为何不减反增,而且越来越猖獗?游戏厂商该反省,相关部门也该深思,一个合理有序公平安全的网络环境应该是所我们共同所追求的。
  说说玩家们的强烈正义感
  黑金门,这场几个人的口舌之争之所以能发展成为几万人的对决,玩家的强烈正义感起到了决定作用。大多数玩家渴求一个合理有序公平安全的网络游戏环境,不想看到这个美好愿望因为几个人的不遵守而遭到破灭,尤其是当罪恶分子犯错之后不但不知悔改反而更加厚颜无耻之时,玩家的正义怒火就再也无法克制,犹如那沉睡已久的火山终于破口而出!
  其实每一次能够引发人们道德思考的事情背后,都有着玩家强烈正义感的存在,无论是“我爸是李刚”似的调侃还是药家鑫“激情杀人”似的无理取闹,都可以看到玩家支持正义一边倒的趋势!这次“黑金门”将玩家的耐心逼迫到了极致,对于道德的拷问使得众多玩家挺身而出,维护正义,维护尊严!
  呼吁:遏制这些问题净化国服环境
  面对现实中所遭遇的安全问题、道德问题、体制问题,我们曾一度呼吁,并尽力打击,直至今日我们已经麻木,我们的这些呼吁太卑微、渺小以致无济于事。缺乏政府强力的手腕打击,这些问题不可能得到解决!或许2012未到来,我们却倒在了自己人为的灾难之中!
  而反观游戏界,相对现实世界来说则要好的许多,尽管风气低下,坑过爹,骂过娘,但绝对不至于动不动就影响到人身安全上来。话说林子大了,什么鸟都有,在游戏这个大群体里,有品格高尚的人,也有品格低下的可耻之徒,这个我们自然能接受!要是这次“黑金”事件主角不公然挑衅受害者,玩家们同样会置之不理,不得不说这次黑金者确实太猖狂了,绝对不配做一个游戏玩家甚至是一个人!
  而对于我们,该寻思的是如何解决游戏中遭遇到无法解决的品格、道德问题,难道除了封号之外就别无他法?对于这些游戏中的恶棍,我们呼吁给其更加严厉的审判,现实中有有期徒刑、无期徒刑、死刑,那么游戏中同样该应该存在,封号不能解决的事情,需要更加有效制裁措施的出炉!就目前国内游戏环境而言,最直接的方法就是遇到问题及时解决,不等事情扩大化之后再去封号,现实诸多事情证明,没有解决不了的问题,就害怕相关部门的懒惰及不作为!而网游厂商本身也要提高技术水平,尽量避免出现冤假错案。作为玩家,而我们应该严于律己,切莫为了蝇头小利而以身试法或者抱着事不关己的态度无视那些罪恶现象。良好的游戏环境,需要我们每一个人的共同努力!
  原文地址:
<font color=#)<font color=#)<font color=#)<font color=#)<font color=#)<font color=#)<font color=#)<font color=#)<font color=#)<font color=#)网页游戏都有哪些安全问题?如何做得更安全? - 知乎727被浏览26619分享邀请回答$signKey = array('openid','appid','ts','payitem','token','billno','version','zoneid','providetype','amt','payamt_coins','pubacct_payamt_coins');
$sign = array();
//从GET参数中,对比找出上面参数的值
foreach($signKey as $key ) {
if (isset($data[$key]))
$sign[$key] = $data[$key];
//只有 GET里有的参数,才参与sig的计算
######开始生成签名############
//1: URL编码 URI
$url = rawurlencode($url);
//2:按照key进行字典升序排列
ksort($sign);
//3: &拼接,并URL编码
$arrQuery = array();
foreach ($sign as $key =& $val )
$arrQuery[] = $key . '=' . str_replace('-','%2D',$val);
$query_string = join('&', $arrQuery);
//4 以POST方式拼接 1、3 以及URL
$src = 'GET&'.$url.'&'.rawurlencode($query_string);
// ## 构造密钥
$key = $this-&config-&get('qq_appkey').'&';
//### 生成签名
$sig = base64_encode(hash_hmac("sha1", $src, strtr($key, '-_', '+/'), true));
if ( $sig != $data['sig'] ) {
$return['ret'] = 4;
$return['msg'] = '请求参数错误:(sig)';
$this-&output-&set(json_encode($return));
在此基础上,还可以做的严谨点:增加随机参数名、参数值。随机参数名、参数值由联运方随机生成,按照参数名的字符串所属ASCII码顺序排序,参数名、参数值均参与sign的计算,增加暴力破解密钥(app key)难度。增加回调验证订单号,金额信息。游戏充值服务器接收到充值请求时,反向到该平台回调接口,确认此笔订单有效性,以防止加密密钥泄漏的问题。远程文件引入 在网页游戏的研发中,多数都是使用框架来做,即使用REQUEST来的参数,作为请求文件名的一部分,来使用,那么很容易形成远程文件引入的漏洞。在我们之前的游戏中,曾出现过一例这样的漏洞问题。// Load the local application controller
// Note: The Router class automatically validates the controller path.
If this include fails it
// means that the default controller in the Routes.php file is not resolving to something valid.
if ( ! file_exists(APPROOT.'controllers/'.load('Router')-&getDirectory().load('Router')-&getClass().EXT))
load('Errors')-&show404('Unable to load your default controller.
Please make sure the controller specified in your Routes.php file is valid.');
include(APPROOT.'controllers/'.load('Router')-&getDirectory().load('Router')-&getClass().EXT);
load('Benchmark')-&mark('load_basic_class_time_end');
从代码以及案例图中,可以看到对于REQUEST的参数没有过滤处理,直接作为文件名来include引入的,故导致这种问题,类似上页图中QQ群网站的漏洞。若PHP version & 5.3.4 ,还会发生Null(%00) 截断的问题,带来更大的安全问题。在我们新的项目中,我们更改了实现方式,我们游戏所有接口都会走gateway,gateway里,对控制器名做类名规范的检测处理,再在指定几个目录下做autoload加载文件,且还会对REQUEST的类名、方法用ReflectionClass反射类的处理,检测到类、方法、参数是否合法。一来避免『远程文件引入』漏洞问题,二来便于前后端联调时,抛出更详细的异常,方便调试。下面为参考代码:从代码以及案例图中,可以看到对于REQUEST的参数没有过滤处理,直接作为文件名来include引入的,故导致这种问题,类似上页图中QQ群网站的漏洞。若PHP version & 5.3.4 ,还会发生Null(%00) 截断的问题,带来更大的安全问题。在我们新的项目中,我们更改了实现方式,我们游戏所有接口都会走gateway,gateway里,对控制器名做类名规范的检测处理,再在指定几个目录下做autoload加载文件,且还会对REQUEST的类名、方法用ReflectionClass反射类的处理,检测到类、方法、参数是否合法。一来避免『远程文件引入』漏洞问题,二来便于前后端联调时,抛出更详细的异常,方便调试。下面为参考代码:require_once CONFIG_PATH . "/auto.php";
spl_autoload_register("__autoload");
//默认消息格式
$view-&clear();
$view-&error(MLanguages::COM__INVALID_REQUST);
$msg = new Afx_Amf_plugins_AcknowledgeMessage($val-&data[0]-&$messageIdField);
$msg-&setBody($view-&get());
$message-&data = $
$a = new Yaf_Request_Simple();
$a-&setControllerName($method[0]);
$a-&setActionName($method[1]);
$objC = new ReflectionClass($method[0]."Controller");
$arrParamenter = $objC-&getMethod($method[1]."Action")-&getParameters();
$arrRequest = isset($val-&data[0]-&body[0]) ? (array)$val-&data[0]-&body[0] : array();
$bCanCall =
foreach ($arrParamenter as $objParam)
$parm = $objParam-&getName();
$bIsOption = $objParam-&isOptional();
//是否为可选参数
if (isset($arrRequest[$parm]))
$a-&setParam($parm , $arrRequest[$parm]);
elseif ($objParam-&isOptional())
//可选参数
$bCanCall =
if ($bCanCall)
$rp = $app-&getDispatcher()-&dispatch($a);
$msg = new Afx_Amf_plugins_AcknowledgeMessage($val-&data[0]-&$messageIdField);
$msg-&setBody($view-&get());
$message-&data = $
SQL 注入SQL注入原理、方式,跟普通web应用一样,没什么特别的,在使用REQUEST来的参数时,过滤处理即可。可能在消息格式,以及注入操作简便上,会蒙蔽研发人员的眼睛,被忽略掉了。比如我们项目的AMF消息格式,在前端界面没出来之前,我们后端程序员一般使用Pinta来模拟操作,调试程序。前端界面出来之后,会使用Charles proxy来捕捉http请求。在这些过程中,请求接口、参数的构造,没有普通web那么简单。研发人员也容易忽略对请求参数的过滤,故很容易形成这种问题。防御方式做过滤处理,或SQL预编译。SQL 注入产生SQL 注入产生为了提高游戏服务器的吞吐能力,网页游戏的架构也是一直在演变的。在之前以Mysql作为数据存储的webgame架构中,其他节点都是可以水平扩展,或者说依赖简单粗暴的增加服务器来解决,单单作为唯一数据存储中心,不能这么做。为此,很多webgame的数据存储改用Nosql来代替,甚至java、C/C++的游戏数据,直接在内存中操作,游戏关服时,才写入到DB中。故SQL注入的问题,也会越来越少。通讯协议与消息格式网页游戏虽然名字叫网页游戏,但通讯协议并非全是http,也有很多使用socket,以及http+socket并用的做法。我们是http协议+amf消息格式,以及socket并用来实现。在http与https的取舍上,我们考虑到ssl的启用后,大量的ssl解密加密运算,势必会增加服务器大量的CPU计算压力。而传输的内容,多数是游戏业务的操作,响应,是能接受被监听嗅探的行为的(认证信息除外)。站在安全角度,这不能理解。但站在产品角度,考虑一下 投入产出,然后选择http通讯,也是可以理解的。socket在我们游戏中,除了在聊天应用上使用外,在一些组队、帮派战之类需要多个玩家之间同步数据信息时,我们也会使用socket来推送数据。在使用socket作为所有业务传输的协议时,协议格式一般都是开源协议,比如msgpack、protobuf之类,或者自定义的协议。使用自定义协议时,务必检测整个消息包的每一个参数,类型范围,避免个别超大数值、边界数值出现,导致主程序内存越界,以至于服务宕机,无法正常服务的情况发生。金币复制-整型溢出上周周六开周会时,听到其他项目组的一个关于整型溢出导致产生刷金币的问题。在这里,我抽象该案例,分享一下。商城出售开启背包格子的所需道具『梧桐木』。在游戏中,用户包裹格子数量一般都会作为一个收费点,一款游戏的格子大约为每行7格子,一共8行这样。比如前面3行是默认开放的,第4行是收费的,而且第一个格子所需品梧桐木的价格1个银子,第二个梧桐木是2个银子,第三个是4个银子。依次类推,意味着这些梧桐木的价格总和其实就是一个第一项为1,公比为2,项为35的等比数列。 当用户选择购买梧桐木数量大于31时,比如32-36中这些数字时,这些等比数列的和就是大于。(只是举例,实际上不会以这样的价格出售物品)在java中,4字节的存放int型变量的范围是-至。在java、c的有符号int型中存储时,数的最高位描述符号位,4字节共32位,除去最高位的符号位,剩下31位,每个位上能表示2个数字,4字节的有符号的整数表示范围为:负整数2^31个,范围为『-1至-』;正整数2^31个,范围为『至1』。 比如下图(注意十进制数字跟二进制表示的变化顺序):当开启格子数字为大于31时,比如32,那么所需费用就是个银两,再买点其他物品,凑成超过的数字,比如又买了3个银子的其他道具,总共花费个银子,在4字节的有符号int中表示出来的结果,变成符号位为1,即负整数。数值位为00 ,也就是00 ,对应十进制的-。程序逻辑上,再判断现有银两是否足够支付此笔花费时,是通过的。当使用当前余额减去这笔花费时,将变成减去一个负数,那么实际上就是加上一个正整数。变成了自己银两账户余额的增长。而余额字段类型是long,则正确的存储了这些余额,溢出漏洞被利用。在C中,使用无符号的数值类型,即可完成数值类型溢出刷钱的行为,但在java中,好像没有无符号的类型。这也可以先确定所有参与计算的数值必须为正整数作为必要条件(游戏业务特性,游戏内所有数字,肯定全为正整数,甚至都不包括零),先做大小判断,再做正正相加,不能得负;负负相加,不能得正。来判断是否发生了溢出问题。金币复制-并发请求Rpg类型的网页游戏中,多数都有道具出售的功能,直接卖到商店,以及道具材料从商店买入功能。当玩家同时针对买入、卖出两个操作,瞬间大量并发请求时,在服务器的处理逻辑一般有分别的两个进程处理,共享数据分别数据库中的对应账户余额表,如下图://卖出
// startTrans
$iBalance = $obj-&getBalance('user1');
//UPDATE `role_gold` SET gold = 150 WHERE role_id = 1
if(!$obj-&setBalance('user1',$iBalance + 100))
//rollback
//扣除物品
if (!$obj-&delItems($items))
//rollback
// startTrans
$iBalance = $obj-&getBalance('user1');
//UPDATE `role_gold` SET gold = 0 WHERE role_id = 1
if(!$obj-&setBalance('user1',$iBalance - 50))
//rollback
//发放物品
if (!$obj-&addItems($items))
//rollback
卖出请求的处理进程为1,买入请求的处理进程为2。在进程1还没将结果写入到DB时,进程2也从DB读取到余额为50。这是,两个进程拿到的余额信息都是50。进程1按照逻辑代码,计算出剩余余额是150;进程2计算出的剩余余额是0。最后,不管那个进程最后写入余额,都是错误的结果。(注:这里的代码逻辑操作,跟mysql事务无任何关系,事务只能保证单个进程的事务范围内多条语句都正确执行,或回滚。比如能保证扣钱成功,且物品删除掉的两个语句都正确执行。能保证其中之一的语句执行失败时,都正确回滚。)其实,在事物开启时候,SELECT语句是否可以取到最新的数据,或者是否需要等待锁释放,取决于MYSQL的事务隔离级别。在MYSQL的事务隔离级别中,有一下几种隔离级别:READ-UNCOMMITTED(读取未提交内容)级别READ-COMMITTED(读取提交内容REPEATABLE-READ(可重读)SERIERLIZED(可串行化)对于READ-UNCOMMITTED,可以读取其他事务中未提交的数据,而且据说性能还高不到哪里去,几乎没有在实际应用中使用;对于READ-COMMITTED,在同一事务中,会因为其他事务随时可能有新的commit,导致同一select可能返回不同结果。这个也不适合游戏业务;再说第四个SERIERLIZED,只要事务开启,所有其他查询,均排队等待该事务提交之后,对于上面提到的卖出买入情况,第二个事务的SELECT操作,不会立刻返回,会处于锁等待状态,一直到前一个事务结束。这个隔离级别,虽然能避免上面的问题,但性能较差,一般不会去使用。而REPEATABLE-READ隔离级别,也是mysql默认的隔离级别,从功能上,比较符合游戏业务需要,也应该是广大webgame架构中mysql的默认隔离级别。对于这个问题,你可能很快就给出解决办法,把UPDATE语句改为UPDATE `role_gold` SET gold = gold
+ 100 WHERE role_id = 1或者UPDATE `role_gold` SET gold = 150 WHERE role_id = 1 AND gold = 100来解决,但这种多个事务同时操作修改多个表的多条记录时,还容易引发死锁问题,比如:
而且,当条件为跨表内数据是否存在,或者另外条件不在MYSQL中,而在其他网络接口的响应中时,如何做呢?金币复制--逻辑漏洞引用DNF的漏洞新闻 《利用网游漏洞狂刷游戏币赚钱 玩家自曝3天赚17万》玩家曝出刷币漏洞 一个游戏道具可刷400人民币该漏洞到底是什么?原来游戏中“云幂袖珍罐”这个道具,可以开出2件一样的游戏装备,还有极少几率开出游戏币,开出的装备不值钱,但如果开出金币了,则分为5000万、8000万以及1亿游戏币。而1亿游戏币,按正常市场行情,可在交易网上卖400多元人民币。据玩家称,在游戏中,角色的装备是需要用包裹来存放的,不过目前角色的包裹最多只有48格,也就是只能存放最多48件装备。漏洞就是利用包裹的有限空间,存放47件装备(存放满了又无法开罐子),只留下一格空位,而在开“云幂袖珍罐”出装备时,就会因包裹空间不足,而导致开罐失败,而罐子还存在。玩家继续开罐,直到出现金币,但金币不会占据包裹的空间,因此开罐成功,然后罐子消失。发现这个漏洞后,部分玩家狂刷游戏币,然后马上在第三方交易平台出售游戏币,兑换成现金。这种问题,都是研发人员逻辑不严谨导致,这种问题,也较难发现。规避方式可以依赖下面提到的『运营数据监控』。道具复制--背包整理跟上面的卖出、买入一样,同时穿装备、整理包裹。在设计时,可能会将身上装备设计在装备表中;将不在身上的装备,设计到背包表中。当同时进行穿装备跟整理包裹的请求并发时,也会发生跟上面卖出,买入的情况,线程1读取DB,发现包裹里有这装备,然后准备删除背包表的这条记录,当准备写入到装备表时,另外一个整理包裹请求的线程来了,读取了整个背包表,进行道具的合并、排序。这时,之前的线程将这个装备写入到装备表,并删除了背包表里的数据,并提交事务。这个穿装备的所有操作都是合理、正常,且正确执行的。但另外一个整理背包的线程读取了之前的背包表里的数据,包括那件被穿上的装备。在游戏中,整理背包需要对可堆叠道具做堆叠操作的,意味着需要合并多个道具,删除部分道具。这意味着这里的操作,当前cgi线程的内存中的数据,将都会以覆盖的形式,写入到DB中,那么意味着,之前被穿到身上的那件装备,也会重新被写入到背包中。那就变成两张表里出现了两个相同唯一ID的相同属性的道具。玩家就可以把背包中的这个道具出售给其他玩家。在java或者C之类程序中,数据放内存中的游戏,也会存在这个问题,除非做读锁,但读锁会带来锁等待,锁等待会导致线程被占用,阻塞后面请求的处理,堆积大量请求。导致系统负载升高,服务器繁忙,以至于无法响应。好了,大约理解道具复制的形成原因了吗?这个问题,我们从根本原因想想,问题到底出现在哪里?如何规避呢?细心的同学不难发现,对于穿装备的操作结果,会对下一个请求产生影响的,当前操作未得到服务端响应之前,服务端是不能处理下一个响应的。对此,我们做了响应处理锁--『用户并发请求锁』。用户并发请求锁的实现,php中session以文件形式存储时,php会对session文件加锁,不释放(如果不特意执行session_write_close),知道当前响应完成。另外一个线程才可以正常读取,这简介的形成了单个用户的并发请求锁,但是,后面的进程一直处于等待状态,也会占用一个php-fpm进程,阻塞其他用户的正常请求对php线程的使用。为此,我们使用NOSQL的K-V形式结构,以user_name为key的形式,实现用户并发请求锁,比如 redis的setnx接口,原子性判断操作有则返回false,,没有就添加一个,返回true。那么,对于下一个请求,setnx时,返回false,有这个key了,那么立刻抛出异常,结束响应,FLASH根据异常内容,提醒用户不要进行恶意操作。即不会发生并发请求,又不会阻塞请求处理。同时,在请求结束的析构函数里,对这个锁进行删除操作,不影响下一个正常请求。若因为程序异常,发生语法错误,导致析构函数没法执行,没有删除用户锁时,可以在生成锁的时候,设置过期时间,比如5秒,甚至2秒,利用nosql的过期机制,实现用户解锁,避免用户长时间无法正常游戏。类CC攻击-多用户共享资源锁的timebomb我们现在研发的项目,是以NOSQL Redis作为DB,来存储数据的,redis并没有成熟的事务处理机制,watch甚至算不上关系型数据库中的事务处理。对此,更需要对表进行加锁解锁。java之类语言的项目,很多都是直接操作内存的,更是需要资源锁,来解决并发问题,解决多个请求操作同一份数据的问题。公司有另外一个项目,出现过一次因为锁的颗粒度较大,带来的锁等待timebomb的问题,也导致了线程繁阻塞忙,请求堆积,系统负载上升,导致宕机的问题。这个项目的锁是针对所有用户的锁,每个用户的请求发来时,当前线程会对所有用户的数据加锁,直到响应完成,才释放掉。这么做,是为了解决因当前操作,会影响到其他用户数据,比如多人PK,多个玩家之间的交互。当其他请求一并发来时,那么资源会立刻被锁住,直到上一个请求结束,才释放锁,那么其他线程都处于等待状态。用户基数小时,是看不出来锁带来的影响的,内存操作都比较快。当用户基数大时,或者说请求数增大时,后面的请求的等待时间会越来越长,超过webserver的等待时间,直接返回timeout,不能正常提供服务。这种问题的发生,是因为锁的颗粒太大了,不应该将所有用户都锁住,最好细化到当前请求所影响到的单个用户,只锁住单个用户的数据。这样,才减少timebomb的发生。另外, 提到很多webgame 的前端做了判断,而后端没做判断的问题,这种问题,实属不该存在。在我们的项目中,后端做的验证判断,远比前端多的多。有时候,为了界面上的动画表现,前端flash一般会在用户操作之后,立刻渲染,然后,再根据后端响应,决定是否继续做界面元素改动。比如脱装备,玩家操作时,会先渲染装备从角色面板,跳到背包里的动画,然后,再根据后端响应结果,决定是否回滚动画。这样,避免显得操作后,一定时间的反映迟钝假象,以提高用户体验。当然,后端是一定会做判断的,判断角色背包是否有空格之类。现在的webgame研发,一般都不会存在前端判断,而后端不判断的做法了。如果有,也应该是个别遗漏情况。其他去年的time33算法的hash dos的问题,使用json消息格式的webgame一定要注意,php只是在接收请求时,做了最大数量的限制。但在json解码之后的数据中,是没有处理的。这里千万别忘记了。运营数据异常监控再完善的防御措施,都仍会有安全漏洞。适当的监控措施,也一定要有,监控等级、金币、游戏币、经验、珍贵物品的变化等等,一旦发现,立刻报警,在漏洞未扩散之前,第一时间去修复漏洞,以减少损失,维护游戏平衡。--------------------------------10-16 21:08补充---------------------日志日志系统一定不能漏掉,所有操作,必须写入日志,当安全事件发生后,可以作为各种数据回滚,交易纠纷处理的可靠数据。也是作为数据监控的最准确的数据来源。--------------------------------10-18 16:05补充---------------------补一个真实的故事。去年6月份,我们项目新上线一个系统,以及腾讯充值接口V2升级V3,涉及充值代码改动,研发测试、策划测试、QA测试完毕之后,上线到个别服务区,观察情况。每次新版本上线,整个项目组都会持续观察数据情况,尤其是充值总额, 10、50、100的涨,突然,总额下降了。充值总额下降了,这可是总额啊,只能增加,是不会下降的。肯定哪里有BUG,DBA直接看binlog,查充值记录相关的SQL语句,最后发现充值系统的sql语句为UPDATE table set gold_num = $num,is_pay =1 ,没有WHERE,没有WHERE啊,多么弱智的BUG,这尼玛能容忍么?肯定要拉出来,弹JJ弹到死。当我从SVN日志中看到涉及这个文件的修改者时,我立刻石化了,悄悄的修了bug,默默的上传......事情是发生了,原因很弱智。是我自己,忘记写where条件,由于框架封装了,问题并不容易被发现。而且自己测试充值都是正确的,包括后来的策划测试、QA测试,都没有发现问题。所属功劳,就是“数据监控系统“,所以,我们游戏开发商,第一时间,比用户还早的发现了问题所在。数据监控,一定必不可少。至于修复方案,那要感谢日志系统。每笔充值,都有双份日志,一是各个游戏大区自己的DB中。二是充值中心中。充值中心负责跟其他各大平台对接。这次的事故,影响游戏大区的数据,并未影响到充值中心数据,故可以有据可查。这样,伟大的DBA可以更便捷、放心的修复数据了。对此,不管发生其他刷钱、刷装备、盗号之后的交易纠纷,都可以依赖日志来做处理。日志系统,也一定必不可少。从新功能发布,到发现BUG,到修复BUG,总共历时不到1小时(svn时间可以看出来,16:30对外的),可想而知,数据监控的效果多么值得称赞。新功能上线时,各个测试环节要去做。按大区服务器,做灰度发布也可以更小的减少bug影响范围,减少损失。---------------------------------10月22日 更新------------------------------------------------协议与外挂本问题的目标是『网页游戏』,『网页』意味着的用浏览器。使用浏览器与服务器通讯的游戏,才能成为浏览器。而浏览器支持普通的http协议的基本网页数据通讯,支持以socket协议的flash插件或者java Applet实现,以及unity3D开发的游戏。就目前业界流行做法上,flash插件做客户端的占了一多半。unity3D的客户端源码安全性我不清楚。flash的源码,众所周知,很容易逆向出来。比如回答者 提到博客
中所写方式逆向还原出flash源码。当源码很容易被拿到后,那么通讯协议的消息格式,也是一览无余,那么各种外挂实现起来,易如反掌。 在我们项目中,对于外挂的态度,一般都是放在最后考虑。当项目前期,没有多少知名度,也没盈利时,我们开发商是不会把精力放到防外挂上的。而且,天下攘攘,皆为利往,同样的外挂编写者也会认为这无利,会无视它。当然,也不是无视外挂的存在,我们一般这么对待它:策划初期,减少重复性劳动的玩法,以免玩家感到疲劳,给与外挂市场。若重复性不高,那么外挂可用性也就差。游戏本身提供一些内挂,替玩家实现重复性劳动。前后端都是统一网关,后期实现协议加密也比较简单,快捷。抵挡住初级外挂编写者,当然,中国人才济济,大牛多多。定时更换通讯密钥,增加外挂编写者的劳动量。游戏内部机制限制,比如体力值。人肉判断,验证码之类(网页游戏目前还没火到这个地步)。其实,网页游戏中的最大、最多的漏洞,几乎都是游戏业务金币复制、装备复制等技术性漏洞,以及游戏业务判断不严谨、条件不合法之类的逻辑漏洞,而常见的web漏洞在网页游戏里,显得并不突出,种类数量也少,也较为容易发现,修复。=============================日更新================我不知道这个回答会不会还有人看到,因为这不是一个新的回复,不会出现在各位的消息提醒中,可能不会涨粉,但我觉得还是有必要在更新一下,希望以后通过搜索,看到这篇文章的同学,对你们有帮助。SO,我还是更新一下。又一起webgame中的刷道具的问题,问题发生在背包内道具移动的业务上:当从A位置移动到B位置时,若两者是同一类型,且可叠加(两者都是绑定或不绑定),则叠加数量到其中一个上,并销毁另外一个。若不是同一类型,或不可叠加,则两者呼唤位置。若目标位置为空,则把物品从A移动到B。如果这个功能由你看写,你如何写?程序员的代码在
* 背包内道具移动
* @param string $former
源位置格子号
* @param int $target
目标位置格子号
public function MoveItemAction($former, $target)
$former = trim($former);
$target = intval($target);
if(!$former || $target & 1)
return $this-&_view-&error(MLanguages::COM__PARAMETERS_NOT_LEGAL);
//参数异常;
//获取道具信息
$former_item = $this-&__mItems-&getNumberItem($former);
if(!$former_item)
return $this-&_view-&error(MLanguages::PACK__NOT_EXIST);
//使用道具不存在;
$former_md5id = $former_item['md5_id'];
$former_num = $former_item['number'];
$former_base = $former_item['item_id'];
$former_sup = $former_item['superpose'];
//开启事务
$this-&__mRole-&beginTrans();
$target_item = $this-&__mItems-&getNumberItem($target);
其出现问题部分就是如上这些,大家看代码时,会认为这前期的判断都是正确的,符合业务逻辑的,问题却发生了“来源格子”跟“目标格子”的判断,没有判断这两个参数是不是同一个位置,若是同一个位置,那么上面的所有业务逻辑判断都是合法的,下面的代码中,将根据这“两个”道具的属性进行堆叠,然后就发生了道具复制的问题.....修复方法想必大家都会,就是判断来源位置目标位置是否相同if(!$former || $target & 1 || ($former == $target)) //判断来源位置目标位置是否相同
如果是你,你会犯这样的错误吗?以上为鄙人的游戏研发经验,欢迎讨论。时间仓促,再加上感冒前期症状,轻微头晕,难免思维混乱,敬请谅解。 此回答禁止转载,代码高亮效果不理想,其他格式没有。鄙人BLOG中文章
可以转载,但务必遵循博客所示协议。 大神能给个赞么?葛大神点赞了,居然看到了,居然点赞了。内牛满面。43747 条评论分享收藏感谢收起324 条评论分享收藏感谢收起查看更多回答4 个回答被折叠()

我要回帖

更多关于 安全问题 的文章

 

随机推荐