最近在社区版网页游戏的开发中,其实我们在整个开发过程中遇到了很多问题。而这些问题也被非常细心的用户发现,并利用插件加以利用。比如我之前写的一篇博客《Never Trust User's Input》中提到过,因为整个程序在判断用户购买道具时省略了负数的处理。今天就用另一个插件问题来说说网页游戏中的插件。
网页游戏的外挂与网络游戏的外挂完全不同,它们需要的技术要简单得多。常用的方法是使用模拟http数据提交,当然这个过程需要知道前台(一般flash)的请求接口和请求接口的功能;程序会自动依次调用这些接口。
例如:在农场游戏中偷朋友的食物,而这个操作需要访问权限,它需要传递参数a=B;c=D; 那么下面的php脚本就可以达到这样的效果(注意一般程序需要登录,这里需要处理传递给对方的--id,可以使用下面提到的两个工具来获取)
$rr_url = 'http://www.aaa.com/steal.php';
function curlCookie($url, $cookie, $post)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
$cookie && curl_setopt($ch, CURLOPT_COOKIE, $cookie);
curl_setopt($ch, CURLOPT_POST, true);
$post && curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}
$cookie = '';//这个是记录你登陆的session_id
$post = http_build_query(array('a'=>'B', 'c'=>'D'));
curlCookie($rr_url, $cookie, $post);
如果你把整个游戏过程分析清楚(耐心点),然后写一系列这样的请求脚本,就可以让程序自动运行了。至于如何观察每个请求的详细信息网页游戏制作流程,有两个工具。如果你使用它,你一般会使用它;在下面使用它。
以上就是网页开发的基本知识。想了解更多,需要了解http协议,不过可以通过以上知识上手;所以你不需要手动玩游戏,让插件程序帮你实现。要想获得更大的收益,就需要找到程序的漏洞,这是一项需要耐心的工作。比如比赛是足球比赛,你可以每天和别人打一场比赛,但是每天的比赛次数是有限的,一天最多可以打30场。而如果想多玩几场免费游戏,就需要找漏洞了:
1.最简单的方法:从玩游戏的界面开始,先尝试用多并发程序不断访问这个界面,我们遇到的问题是在处理php的时候,因为人多请求:
A:判断剩余次数
B:中间执行代码
C:更新游戏时间
两次请求中有这样一种情况,i请求执行B,此时ii请求执行A,这样他可以玩更多的游戏,我们可以为这样的操作设置flag变量;另外,B的过程会很短,使用的机会不多。
PHP也有多线程操作,下面是上一个程序的多线程版本
function multiCurlCookie($url, $cookie, $post)
{
$main = curl_multi_init();
for($i=0; $i 0);
for($i=0; $i
2. 找个地方更新游戏时间。比如我们的游戏中,某个地方更新游戏时间的逻辑处理有问题,聪明的外挂发现了这个问题,就利用这个漏洞不断的玩游戏,游戏结束后,他们将无限期地更新游戏时间。最大值较大。
以下是如何防御此类黑客攻击:
1. 详细测试程序
2.修改程序时要小心。大多数破坏性行为是由于缺乏对程序的仔细考虑。同时,我们也不得不佩服这些插件的用心。
3.记录一些敏感信息以备日后观察
发现系统有插件,我们从那些地方发现了入侵者的线索:
1.php错误日志--检查用户是否有非法输入天外神坛,导致php错误
2.nginx/访问日志记录,查看用户访问程序的先后顺序和具体的接口,看是否有可能存在的漏洞
3.自己的日志记录,一般程序会记录关键部分,观察某些操作是否正常---这个项目需要在程序设计中考虑
4.数据库中的数据,观察用户更新与他相关的数据
5.数据库语句的日志记录---例如mysql中的bin.log文件
今天出现的问题是在数据库操作日志文件中找到大量更新比赛次数的操作,调整思路,在更新比赛次数的时候发现了问题。也就是没有充分考虑程序的逻辑。
简单的说了这么多,其实核心就是考虑程序设计,关注用户的异常行为。我们没有测试的地方,插件开发者帮我找到了网页游戏制作流程,所以我第一时间发现了问题并解决了。其他的安全问题我这里就不说了,比如服务器和数据库的操作权限导致的管理权限泄露,php脚本的攻击等。这些是必须在程序开始时采取的基本安全预防措施。
转载于: |