ThinkPHP

网站存在漏洞被篡改了会员数据该如何检测和修复

断了今生、忘了曾经 提交于 2019-12-04 17:40:47
某一客户的网站,以及APP系统数据被篡改,金额被提现,导致损失惨重,漏洞无从下手,经过朋友介绍找到我们SINE安全公司,我们随即对客户的网站服务器情况进行大体了解.建议客户做渗透测试服务.模拟攻击者的手法对网站存在的数据篡改漏洞进行检测与挖掘,就此渗透测试服务的过程进行记录与分享. 首先客户网站和APP的开发语言都是使用的PHP架构开发,后端使用的thinkphp开源系统,对会员进行管理以及资料的统计,包括充值,提现,下单功能.服务器使用是linux系统.共有3个接口,分别是WEB前端,接口,后台,都采用的是action的方法来调用,并初始化数据.我们看下代码 不同入口传入过来的值,并进一步的操作都不一样,我们SINE安全技术在get,post,cookies的请求方式中,发现一个规律,在查看代码中发现都是使用的get()的方式来对传入过来的值进行安全效验与拦截.对一些特殊符号包括<> 都进行了安全转义,不会直接输入到后端中去.基本上的一些漏洞,XSS,SQL注入漏洞是不会很容易的找到.我们继续对代码进行分析与渗透测试,对漏洞多次的测试,终于找到一处存在SQL注入漏洞的代码,存在于网站的会员头像上传功能. 我们抓取上传的数据包,并进行修改,将恶意的SQL注入代码写入到数据包中,将头像的图片内容进行修改提交过去,发现服务器返回错误,原因是对图片的内容进行了解析操作

TP5项目在lnmp环境上线出现500错误

我的未来我决定 提交于 2019-12-04 15:01:52
今天准备把之前用tp5框架写的一个小项目上线的服务器上 在windows下没问题,但是上传到服务器后访问接口出现500错误 用的是lnmp的环境,文件上传后把所有权限都打开,都显示 HTTP ERROR 500的错误,服务器内部错误 该网页无法正常运作 mz.kechangfu.cn 目前无法处理此请求。 HTTP ERROR 500 1 2 3 4 5 6 在入口文件index.php中加入 error_reporting(E_ALL); ini_set('display_errors', '1'); 1 2 来打印所有错误信息 代码打印出 Warning: require(): open_basedir restriction in effect. File(/home/wwwroot/mz.kchangfu.cn/thinkphp/start.php) is not within the allowed path(s): (/home/wwwroot/mz.kchangfu.cn/public/:/tmp/:/proc/) in /home/wwwroot/mz.kchangfu.cn/public/index.php on line 22 Warning: require(/home/wwwroot/mz.kchangfu.cn/thinkphp/start.php):

将PHPMailer整合到ThinkPHP 3.2 中实现SMTP发送邮件

与世无争的帅哥 提交于 2019-12-04 07:45:50
将PHPMailer整合到ThinkPHP 3.2 中实现SMTP发送邮件 ThinkPHP没有邮件发送的功能,于是,我就想了想,就将PHPMailer整合到ThinkPHP中吧。 PHPMailer是不符合ThinkPHP规范的插件程序,所以,我们需要先将PHPMailer程序放到ThinkPHP的 Library/Vendor目录下,我这里是最新版的ThinkPHP 3.2,如果是是ThinkPHP 3.2之前的版本,可能就是Lib目录了。Vendor目录专门用于存放非标准ThinkPHP插件的目录,如下: PHPMailer整合到ThinkPHP中的存放目录 接下来为了方便发送邮件,我们可以定义一个专门发送邮件的函数sendMail(),这个函数可以只接受邮件发送的最基本的参数,发送到哪个邮 箱$id,邮件的主题$subject,邮件的内容$content。不过为了方便我们修改SMTP邮件发送服务器,我们先在config.php文件中 定义好邮件发送服务器,内容如下: config.php <?php return array ( // 配置邮件发送服务器 'MAIL_SMTP' =>TRUE, 'MAIL_HOST' => '邮件发送SMTP服务器' , 'MAIL_SMTPAUTH' =>TRUE, 'MAIL_USERNAME' => 'SMTP服务器登陆用户名' ,

thinkphp3.1无限级分类模块的设计

蓝咒 提交于 2019-12-04 00:48:00
实现无限级分类一般只用一个数据表,通常可通过递归和非递归两种方法来实现。递归方法必须使用递归 调用方式才能进行数据遍历,删除等操作,所以需要发送多次查询数据库语句,非常影响执行效率。那么 非递归该怎样来实现无限分类呢?简单来说可用一张表四个字段和一条语句来实现。 1、一张表四个字段 DROP TABLE IF EXISTS `wb_columns`; CREATE TABLE `eway_columns` ( `colId` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `colPid` smallint(5) unsigned NOT NULL DEFAULT '0', `colPath` varchar(100) NOT NULL DEFAULT '', `colTitle` varchar(100) NOT NULL DEFAULT '', PRIMARY KEY (`colId`), KEY `colPath` (`colPath`) ) ENGINE=MyISAM CHARSET=utf8; 2、一条语句 SELECT concat(colPath,'-',colId) AS bpath, colId,colPid,colPath, colTitle, FROM " . C ('DB_PREFIX') . "columns

thinkphp5 + PHPQRCode 类库简单实现生成二维码(原始二维码和带 logo 二维码)

浪尽此生 提交于 2019-12-03 16:38:06
一、 PHPQRCode 是什么? PHPQRCode 基于 libqrencode 的 C 库开发, 提供创建二维码的 API. 注意: PHPQRCode 的实现必须开启支持 GD2 扩展库 (一般情况下都是开启状态) 二、如何安装? 项目下通过 composer 安装 composer require endroid/qrcode 手动下载复制到 tp 项目下代表第三方类库目录 vendor 里. 下载地址: https://sourceforge.net/projects/phpqrcode/files/ 三、实现过程 使用到 vendor\aferrandini\phpqrcode\lib\PHPQRCode 下的 png 方法 public static function png($text, $outfile = false, $level = Constants::QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false) { $enc = QRencode::factory($level, $size, $margin); return $enc->encodePNG($text, $outfile, $saveandprint=false); } 创建一个控制层文件 index.php <?php //

ThinkPHP3.1.2整合UCenter详解(二)

帅比萌擦擦* 提交于 2019-12-03 14:33:09
在 ThinkPHP3.1.2整合UCenter详解(一) 中我们安装完了WBlog3.1.2、UCenter_Home_2.0_SC_UTF8和UCenter 1.6.0三个程序后。接下来接着上一篇讲。找到下载的UCenter 1.6.0,把 advanced 目录里面的 uc_client 和 examples下面的api 文件夹复制到网站根目录wblog1下,和ThinkPHP在同一目录。找到项目W3note的配置文件夹wblog1/ Conf/,在其新建一个UCenter的配置文件 config_ucenter.php ,然后在WBlog1\W3note\Lib\ORG目录下新建一个UCenter的通讯处理类文件UcService.class.php,我们先不要管文件里面写什么代码,后面将会讲到。好了到这里已经把后面要操作的目录和文件都布局好了。为了理清目录和文件之间的层次关系,我把目录和文件制成目录树列出来: wblog1根目录 | – index.php//前台入口文件 | – admin.php | – W3note//前台项目 | | – Lib | | | – ORG | | | | –UcService.class.php //UCenter的通讯处理类文件 | | – Conf//W3note项目的配置目录 | | | –config_ucenter.php

最完美ThinkPHP nginx 配置文件

一笑奈何 提交于 2019-12-03 10:47:55
网上的TP nginx配置没找到一个合适的,所以只好自己写, 就当是学习nginx了. 完美支持4种url模式 静态文件404不跑fastcgi浪费资源 没有多于的IO浪费 ,别怪我没提醒你收藏哦 server { listen 80; server_name thinkphp.lo; root /var/www; index index.html index.htm index.php; error_page 404 /404.html; location = /404.html { return 404 'Sorry, File not Found!'; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; # windows用户替换这个目录 } location / { try_files $uri @rewrite; } location @rewrite { set $static 0; if ($uri ~ \.(css|js|jpg|jpeg|png|gif|ico|woff|eot|svg|css\.map|min\.map)$) { set $static 1; } if ($static = 0) { rewrite ^/(.*)$

thinkphp 3.2 增加每页显示条数

南楼画角 提交于 2019-12-03 05:23:05
先上效果图 需求多加一个类似phpmyadmin一样的每页显示条数 查了好久都没找到 看到thinkphp 分页类 是html拼接的 很low 但是方便了我修改 新增需求 在原生分页类基础上 新定义了一个num变量 show方法返回的时候 thinkphp拼接html的地方 新加了一段选择条数的代码 return "<ul class='am-pagination am-pagination-right'>{$page_str}</ul> <div class='am-dropdown am-dropdown-up' data-am-dropdown> <button class='am-btn am-btn-primary am-dropdown-toggle' data-am-dropdown-toggle>显示条数 <span class='am-icon-caret-up'></span></button> <ul class='am-dropdown-content'> <li><a href='".$this->urlNum(10,1)."'>10</a></li> <li><a href='".$this->urlNum(30,1)."'>30</a></li> <li><a href='".$this->urlNum(50,1)."'>50</a></li> <

Thinkphp下实现对数组的分页

眉间皱痕 提交于 2019-12-03 05:22:51
今天终于把两周之前的任务完成了,趁着余热记下来分享给大家。 说一下任务,在thinkphp的框架下实现分页。公司的网站基于Thinkphp框架,一直久闻thinkphp的大名,终于有机会实战了。 thinkphp是MVC架构的,MVC对于任何ITers来说都不陌生, 模型(model)-视图(view)-控制器(controller) 。他将逻辑和数据分开处理,少了很多繁琐的过程。 其实在官方的资料中已经详细的介绍了怎么分页,传送门: http://document.thinkphp.cn/manual_3_2.html#data_page 可是并不适用于数据已经从DB中取出,并且转换为数组的情况,我接触PHP满打满算2个月,接触thinkphp不过3周。之前把很多时间花在了官方文档上,去熟悉thinkphp。也算是磨刀不误砍柴工吧。这里把官方文档当作比较进行阐述: (只举文档上第一个方法):利用Page类和limit方法,代码如下: $User = M('User'); // 实例化User对象 $count = $User->where('status=1')->count();// 查询满足要求的总记录数 $Page = new \Think\Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数(25) $show = $Page->show()

ThinkPHP5中thinkphp-queue的使用

[亡魂溺海] 提交于 2019-12-03 04:17:50
最近小编收到群里面的小伙伴在使用ThinkPHP5.0的框架时,不知道如何使用php-queue(实在尴尬,网上很多这方面的教程)。哈哈,不想参考也没关系,小编就具体地走一遍吧~~~关于什么是队列?队列的解决什么?队列有哪些场景?...等等这些问题,开发者请自行先去了解,还有本案例只针对ThinkPHP框架进行具体操作哦。 安装 thinkphp-queue 推荐使用Composer进行安装,切换到项目的根目录,执行: composer require topthink/think-queue 2. 配置消息队列的存储环境 配置文件位于 application\extra\queue.php,如图: 使用Redis驱动,如果Redis环境还没有安装,请自行安装哦,很简单的,或者也可以使用其他类型驱动,如图: 3. 任务的创建 我们在index模块下,Index.php文件,建立一个名为 queue 的方法(一定要这样么?当然不是,本教程,只是例子,你可以新建模块,方法名也可以是其他),如图: 4. 任务消息的消费以及删除处理 我们在 index模块下创建一个 job 文件,该文件用来处理消费模式,如图: 在 Demo 这个类下,创建一个 fire 方法,该方法是消息队列默认调用的方法。如图: 以上就是完成任务的创建--》推送--》消费了。 在浏览器或者终端,执行一下我们 index