分类目录归档:PHP

快速修复 smarty 站点 XSS问题

最近一朋友,网站被频繁挂马(JS判断百度来路,跳转到博彩)。帮朋友分析了下,这套程序年代久远有庞大,最老的代码写于10年前。朋友自己开发的系统,不支持上传,没发现什么的漏洞。想到XSS的问题,排查工单系统,证明猜测正确。系统过于庞大(超过5万行…),而且没有,全部检查一遍不太现实。看到了 smarty 的 assign(),批量查找出来,替换 过滤 后的数据就可以了。

实际操作中有出现了点小问题,assign 传递的数据,有数组、有字符串,帮朋友写了个 适应任意数据格式的 过滤函数给朋友,解决了问题:代码如下: 继续阅读

phpsh – phpcli开发的终极方案

最近用php代替vbs脚本,做些小工具的开发。为了方便测试不同php版本的兼容,专门写了一个 php版本切换的 批处理 phpsh.cmd,支持安装到系统、卸载等功能,还支持多个php版本的任意切换(需要先安装phpStudy)。

如果需要安装到系统,必须以管理员身份运行 命令提示符,基本的使用方法如下:

安装成功后,就不用使用管理员身份执行了。可以在任意目录 执行 phpsh,会自动设置php环境。

继续阅读

PHP解析纯真IP数据库(qqwry.dat)

这是一个 StructPHP 的教程帖,使用它 解析 qqwry.dat。关于 qqwry.dat 数据结构的分析,请参考:http://www.jb51.net/article/17197_2.htm。,

StructPHP,仅有 20 多行代码,自我感觉不仅仅仅是对 unpack 和 pack 进行了封装,它是一种全新的编码方案。通过这种方法,可以简化 二进制转换的开发过程,使用代码更加易懂。

测试前需要先引入 StructPHP (http://www.miaoqiyuan.cn/p/php-struct) 类,全部的代码如下: 继续阅读

PHP实现 struct结构体

还是那个朋友,在用 Workman 开发 TCP协议 的项目。TCP客户端发过来的流,整数啥的好解析,遇到解析小数蒙圈了。百度一下,竟然没找出来方法,最终使用unpack解决。

直接写,真头疼,很容易出错,模仿C语言的struct自己造了一个车子,这应该是最优雅的解决方案了(自我陶醉…)。

封装成了类,代码如下:
继续阅读

PHP二进制操作初体验

一个朋友 最近在做一个 硬件相关的项目。搞Web的,最擅长的也是最熟悉的 PHP来开发,使用了 workerman 框架。搞WEB的平常很少和 二进制打交道,他看到 文档 开头就蒙圈了。向他的大神(也就是我)来求救了。下面是 部分文档的截图,第一次看时 简直 头大阿。

我也很少 和 二进制打交道,作为”大神”的我,怎么能在”迷弟”面前表现出不会呢,只能硬着头皮上了,折腾了一晚上,终于造出来一个小轮子。代码已经测试没有问题了,另外 为了 让 这朋友 更加崇拜我,完成后,特意美化了一下代码。。。

继续阅读

PHP 数字转字符串互换类

再次更新:发现尽然有现成的Base32方案,无奈已经写好了,还是继续分享出来吧。本方案比Base32相比还是有优势的。
1、自带校验功能
2、解码后可以和数据库中的生成项目对比进行二次验证
3、生成的邀请码是随机,相比Base32规律更难找

本类所在的项目,使用 ThinkPHP 搭建,把 IntConvert.php 放到 app\services 目录下,就可以直接使用app\services\IntConvert 自动调用。如果存放目录后,注意修改下 对应的明明空间。

—-分割线—–

最近 的APP上需要增加一个 邀请码功能,通过邀请码注册。因为内部使用,需要防止 外部用户 随便填写一个 邀请码注册成功。因为主要通过图片的方式进行传播,还不恩那个设计的太长。

初期考虑了两种方案: 最笨的方法是一次生成好,用时随机获取一个。另一个是通过Base64对用户ID进行转换下。分析之后,两种方案都不太理想。 继续阅读