首页
社区
课程
招聘
[讨论]测试
发表于: 2013-4-26 13:18 1706

[讨论]测试

2013-4-26 13:18
1706
这个帖子是公布思路和实现方式的。
本来测试三就是如题的这个东西,可惜测试二发表以后@xsser 就把那个功能模块关闭了,导致第三个测试没有出现。
那么接下来就是贴思路和代码的时间了。
第一个测试:
    大概方法是使用PHP中的函数file_get_contents读取页面源代码,然后用正则取出需要的东西,用图片来输出,很简单的。

<?php 

$url = 'http://zone.wooyun.org/content/'.intval($_GET[id]); 

$opts = array ( 
'http' => array ( 
   'method' => 'GET', 
   'header'=>  "Cookie:这里取自己的Cookie\r\n" , 
) 
); 
$ctx = stream_context_create($opts); 
$html = @file_get_contents($url,'',$ctx);//定义了header取源码 
$html = htmlspecialchars($html);//做个转义 
$parent="/Reply\(\'(.*)\'\)/i";//正则 
preg_match_all($parent,$html,$arr);//取出 
$q=array_unique(array_unique($arr[1]));//去重复 
sort($q);//重新排序 
print_r($q);//输出 
?>

第二个测试:
    这里有一个Csrf的利用。
    先来讲讲这个吧。
    隐藏了这样一个功能在Js中,无意中我翻看时翻到了,因为没有token的传入,比较显眼。代码如下:
function InviteToContent(id){ 
  var users=$("#inviteusers").val(); 
  if(users==""){ 
    alert("请输入待邀请的用户"); 
  }else{ 
    $.get(root+"/index.php?do=action&act=invite",{"id":id,"typeStr":"content","users":users}); 
    $(".close").click(); 
  } 
}

功能明显可以看出是邀请他人参与话题的。
    也就是说,真正get这样请求就可以:

http://zone.wooyun.org/index.php?do=action&act=invite&id=[这里是贴id]&typeStr=content&users=[被邀请人]
    然后在被邀请人的提醒页面就可以看到这样的源代码:

">[邀请人]</a> 邀请你参与 <a href="http://zone.wooyun.org/content/[这里是贴id]
    看客们应该懂了,接下来跟第一个测试差不多,用PHP中的函数file_get_contents读取页面源代码,然后用正则取出需要的东西,用图片来输出。
    可是这个“正则”难到了我。
    测试一中有向大家提出问题寻找PHPer帮助写下正则,可惜没人喊。
    纠结了一下午,终于有人帮忙解决了问题,本来写好的正则,是因为编码问题不能取到东西。
    贴代码:
<?php 
$url = 'http://zone.wooyun.org/index.php?do=user&act=remind'; 

$opts = array ( 
'http' => array ( 
   'method' => 'GET', 
   'header'=>  "Cookie:这里取自己的Cookie\r\n" , 
) 
); 
$ctx = stream_context_create($opts); 
$html = @file_get_contents($url,'',$ctx); 
$parent = "/>(.+)<\/a> 邀请你参与 <a href=\"http:\/\/zone.wooyun.org\/content\/".intval($_GET[id])."/iU"; 
preg_match_all($parent,$html,$arr); 
$q=array_unique(array_unique($arr[1])); 

sort($q); 
print_r($q); 
?>

   各位一看就懂了,跟上例一样。 图片输出代码,来自百度:
<?php 
/* 
Photozero.net 改编自PHP参考文档 
*/ 
function imgto($q){ 
//设置Header,如果输出图片不成功,请先暂时去掉这代码,查看错误信息 
header("Content-type: image/png"); 
header("Cache-Control: no-cache"); 

//要输出的字 


$zh_font = 'msyhbd.ttf'; 
$en_font = 'msyhbd.ttf'; 
//字库的文件名。建议中文字体和E文字体用不一样的,因为宋体、黑体字库里的英文实在不咋滴 
//这里用的都是TTF字体。懒得上网找就到 C:\WINDOWS\Fonts 下,Copy几个字体到程序目录下就好了 

// 创建一个真彩的图片背景,参数是 X长 ,Y宽。 
$im = imagecreatetruecolor(200, 1000); 
//或者可以调用已有的PNG图片等 : $im = imagecreatefrompng('background.png'); 

// 定义几个色彩 
$white = imagecolorallocate($im, 255, 255, 255); 
$grey = imagecolorallocate($im, 128, 128, 128); 
$black = imagecolorallocate($im, 0, 0, 0); 

//填充背景为白色 
imagefill($im, 0, 0, $white); 
//将背景透明化 
imagecolortransparent($im,$white); 
//以上两行是创建透明图片的关键! 
//很多人反应, imagecreatetruecolor创建后的图片,背景颜色是黑的,无论怎么修改都不能变成白色的 
//我先将背景填充为白色,再做透明处理就可以了!在Firefox3和IE7下测试成功! 

// 这是一个很简单的产生阴影的效果。 
//先在原本要输出的位置的偏左下角一点点输出灰色的字体,接着再用黑色字体写上去就有阴影效果了 
//下次再提供点别的花样~ 
//imagettftext($im, 20, 0, 11, 21, $grey, $en_font, $en_text); 

// 写入字体 
$num = count($q); 
for($i = 0; $i < $num+2; $i++){ 
    imagettftext($im, 12, 0, 5, ($i+1)*20, $black, $zh_font, $q[$i]); 
} 




imagepng($im); 
imagedestroy($im); 
// 不用说了,输出图片,然后清除缓存 

} 
//函数都是用PHP内置的,如果有不了解的请参考一下文档。 
?>

只需要include以下然后把print_r改成imgto就OK了。
    本来的测试三是这样想的:
    从第二个例子取了看贴人然后再取回帖人,从看帖人数组中去掉回帖人数组的元素,再输出就是木JJ 的人们了。。。
    看帖不回木JJ
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
回复楼主一下吧...不然就...
2013-4-26 14:17
0
游客
登录 | 注册 方可回帖
返回
//