分类: |

文件上传漏洞之图片缩略图

现在背景如下: 

1. 有上传点, 服务器支持PHP
2. 扩展名可自定义
3. 文件的文件会经过GD库处理生成缩略图,原图不会被保存. 如果GA加载不了上图的文件,上传会失败.

尝试了几种失败的办法. 

1. 直接上传PHP

查看更多...

分类:网络安全 | 固定链接 | 评论: 0 | 查看次数: 6976

MACOS 添加/查看路由表

打印路由表 MacOS 下route不能打印路由表. 

 netstat -rn 

添加路由

route -host 目标IP 网关IP

查看更多...

分类:WEB服务器 | 固定链接 | 评论: 0 | 查看次数: 10328

SimpleHttpRequester的安装和使用

 SimpleHttpRequester是一个Sublime下的一个插件, 可以用来发送Http请求. 

时下流行的Http请求工具有很多, 有名的莫过PostMan, Advanced-REST-client. 都有很好的图形界面。 

但是对一个追求效率的高级程序员来说, 有时候使用图形界面无法将效率达到极致,  我们需要更底层的请求工具. 

SimpleHttpRequester就是这样一个工具。 

查看更多...

分类:PHP教程 | 固定链接 | 评论: 0 | 查看次数: 6223

  正则表达式的先行断言和后行断言一共有4种形式: 

 

(?=pattern) 零宽正向先行断言(zero-width positive lookahead assertion) 
(?!pattern) 零宽负向先行断言(zero-width negative lookahead assertion) 
(?<=pattern) 零宽正向后行断言(zero-width positive lookbehind assertion) 
(?<!pattern) 零宽负向后行断言(zero-width negative lookbehind assertion) 
这里面的pattern是一个正则表达式。

查看更多...

分类:web前端 | 固定链接 | 评论: 0 | 查看次数: 6464

键盘符号中英文名称大全

 符号 英文名 中文名

~	tilde or swung dash	波浪字符或代字号
!	exclamation mark	惊叹号
@	at sign or commercial at	爱特或小老鼠
#	number sign	井号
$	dollar sign	美元符
%	percent sign	百分号
^	caret	脱字符
&	ampersand	与和符
*	asterisk	星号
()	parentheses, round brackets, soft brackets, 
	or circle brackets 	小括号,圆括号
[]	brackets (US), square brackets, 
	closed brackets or hard brackets	中括号,方括号
{}	braces (UK and US), French brackets, 
	curly brackets	大括号,花括号
<> 	angle brackets or chevrons	尖括号
_	underscore	下划线
+	plus sign	加号
−	minus sign	减号
=	equals sign	等号
< 	less-than sign	小于号
> 	greater-than sign	大于号
.	period, full stop or dot	句号,点
,	comma	逗号
:	colon 	冒号
;	semicolon	分号
?	question mark	问号
-	hyphen	连字符
...	ellipsis	省略号
–	dash	破折号
/	slash, forward slash	斜线
\	backslash	反斜线
|	vertical bar	竖线
“	quotation mark	双引号
‘	apostrophe	单引号,省略符号

查看更多...

分类:智慧人生 | 固定链接 | 评论: 0 | 查看次数: 7696

awk 切分nginx日志中的字段

因为nginx日志中有些字段是用引号包起来的,比如"GET / HTTP/1.1"
或者有些字段是用[]包起来的, 比如[20/Jan/2019:18:30:04 +0800]

此时可以用这个命令提取数据

 awk -vFPAT=""[^"]+"|[^ ]+|\\[[^\\[\\]]+\\]' '{print $9}' access.log

查看更多...

分类:linux教程 | 固定链接 | 评论: 0 | 查看次数: 16500

php7 unset数组元素会不会释放内存

 针对这个问题, 我们先上一段代码. 

<?php
$memory2 = $memory3 = $memory4 = 0;
$data = [];
$memory = memory_get_usage();
foreach (range(1, 100000) as $key) {
	$data[$key] = str_repeat("1', 100);
}

$memory2 = memory_get_usage() - $memory;

foreach (range(1, 100000) as $key) {
	unset($data[$key]);
}

$memory3 = memory_get_usage() - $memory;

echo "memory2: " . $memory2, PHP_EOL;
echo "memory3: " . $memory3, PHP_EOL;

这段代码分别会输出3个内存使用情况. 分别记为memory2, memory3. 

memory2: 给数组设置10000个key, 给value字段设置100个1的字符串. 之后的内存. 

memory3: unset掉数据中所有的key之后的内存值. 

查看更多...

分类:PHP教程 | 固定链接 | 评论: 0 | 查看次数: 42409

array_unshift的性能问题

 最近在看php的源码, 看数组这一块的时候发现了一个事情, 分享一下. 

这个array_unshift函数平时使用也不是太多, 所以平时可能没太在意. 先看下源码. 

这里显示array_unshift时,会创建一个新的数组, 把参数中的插入后再把原数组的数据接在后面. 也就是每unshift一个元素, 整个数组都要移动一遍, 这样的效率是很低的. 我们来测试一下, 验证我们的猜想. 

查看更多...

分类:PHP教程 | 固定链接 | 评论: 0 | 查看次数: 40444

不加全文索引解决模糊查询的问题

 模糊查询是我们在开发中经常会碰到的问题, 比如会员列表会根据用户昵称搜索会员, 根据商品标题搜索商品之类的. 如果数据量不是很大(比方说100W以内), 又没有比如文章内容的情况下可以不需要搞全文索引. 

比如我们的场景是这样的, SAAS软件可能会有多公司, 每个公司下有很多的会员. 我们现在需要搜索某个公司下昵称中包含"远洋"的这样一些会员. member表包含600多万条数据, 其中company_id=184306的用户的会员有82W. 

 

查看更多...

分类:PHP教程 | 固定链接 | 评论: 0 | 查看次数: 40387

简单应对验证码接口恶意攻击

 这几天不断的有人攻击公司的验证码接口, 就是随机生成了一系列的手机号然后调用注册页面的验证码的接口. 对待这种攻击自然最严谨的是适时弹出验证码, 可临时我们没有这么快的速度去做这套验证码的方案(前面写了"适时"二字自然不能对所有人都弹出验证码, 本来用户转注册的转化率就低, 再加个验证码那就更难看了). 

今天又是周末, 只能简单处理一下.

我们的接口拉扯类似于

/api/smsCaptcha/send.json

注意到攻击者是用固定的几个IP来发起请求的, 此时最简单有效又不影响用户的方法自然是屏蔽攻击者的ip. 一个简单的指令就能让攻击者暴露无遗. 

tail -100000 /data/logs/nginx_access.log|grep smsC|awk "{print $1}'|sort |uniq -c|sort -n

查看更多...

分类:linux教程 | 固定链接 | 评论: 0 | 查看次数: 40020

PHP错误显示问题, 错误日志去哪儿了

相信很多做PHP开发的同学都会遇到一些PHP报错的情况. 有时候这些报错显示在页面上,有时候显示在日志文件里. 有时候可能会为一个500错误找半天, 却还是没有找到报在在哪里.

下面就根据地我一点点粗浅的认识总结一下这个问题.

开启error_reporting

要想看到错误, 第一件是就是开启error_reporting, 否则所有的错误都不会被报告. 开启的代码为:

error_reporting(E_ALL);

开启了错误报告之后, 我们可能在下面三个地方看到这个错误信息.

  1. 网页页面上. 
  2. nginx日志中.
  3. php错误日志中.

display_errors

查看更多...

分类:PHP教程 | 固定链接 | 评论: 0 | 查看次数: 101743

GIT不要密码, GIT记住密码

我们在使用git的时候,经常会需要输入密码,比如git push, git fetch, git pul.这两个命令是非常常用的命令.每次输入这些命令都需要输入密码会是一件非常浪费时间的事.

如果能够让git记住密码就好了.也就是不需要输入密码.下面我们就来做这件事.

我们指定git远程仓库地址的时候,通常有两种方式:ssh方式和http方式.这两种方式记住密码的方式略有不同.

如何查看我们的远程仓库:

查看更多...

Tags: git

分类:linux教程 | 固定链接 | 评论: 0 | 查看次数: 129466

在Windows下执行Swoole

工作原因已经很久没有写博客了, 最近在研究swoole相关的东西, 又得空, 正好来写一篇. 没什么深度. 

最近在研究swoole, 偶尔需要写点测试代码来测试. 因为swoole不支持windows, 所以需要跑到linux下开个vim写. 总体来说, 还是没有windows下sublime+ctrlB来的爽. 所以想了个办法:

windows + sublime + docker(php+swoole)

说是Windows下执行swoole, 其实实际还是linux下执行swoole.

查看更多...

分类:win7技术 | 固定链接 | 评论: 0 | 查看次数: 130353

让git忽略已跟踪文件的修改

项目中的配置文件在版本管理中有时候会让我们很头疼. 服务器的环境可能不一样, 开发人员的开发环境也可能不一样. 对于这样的配置文件, 一种办法是干脆不加入版本控制. 但这样一来, 配置文件的改动需要用其它方法通知所有相关的开发人员. 而加入版本控制又会带来新的问题. 开发人员需要改配置, 提交的时候要小心翼翼的, 生怕把这个配置文件提交上去. 

对于用git做版本控制的项目来说, 有一种两全的办法.

你可以把一个配置文件加入到版本控制中, 同时你可以在开发者本地忽略这个文件的修改. 命令如下:

$ git update-index --assume-unchanged /path/to/file       #忽略跟踪
$ git update-index --no-assume-unchanged /path/to/file  #恢复跟踪

 当你断言一个文件是unchanged状态的时候, git不再去检查它的状态. 但是当远程分支对这个文件有更新的时候, 将会提示用户这个文件需要合并. 

查看更多...

分类:PHP教程 | 固定链接 | 评论: 0 | 查看次数: 153033

PHP BOM头导致COOKIE无法输出

带BOM头的UTF8文件, 其文件头部占三个字节(0xEF 0xBB 0xBF). 现在有很多的编辑器都可以识别BOM头了, 但还是有一些不能. 比如说PHP就无法识别这个标记. 所以PHP执行的时候会把它当作非PHP脚本直接输出. 

而由于http协议限制setcookie是必需在所有的内容发送调用, 只要有任何的空白内容在setcookie执行之前执行了setcookie将会报一个warning, 且不会输出任何COOKIE

 

这么明显的问题在开发的时候一定会被发现, 但是, 但是, 但是(关键点)很多人调用setcookie时加了一个@符号号来关闭一个函数调用的输出. 

查看更多...

分类:PHP教程 | 固定链接 | 评论: 0 | 查看次数: 160867

curl设置代理

设置SOCK5代理

curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
curl_setopt($ch, CURLOPT_PROXY, "127.0.0.1:1080");

设置HTTP代理

curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt($ch, CURLOPT_PROXY, "http://127.0.0.1:1080");

 

 

查看更多...

分类:PHP教程 | 固定链接 | 评论: 0 | 查看次数: 149951

Windows版Docker体验

 不久前发现Docker可以原生支持Windows了(目前仅支持64位windows10),安装了一个来体验. 此前是需要搞一个Vbox跑虚拟机的.

获取地址: http://www.docker.com/products/overview

因为我开发一般需要用到lnmp环境, 就准备搞一个这样的容器. 没有用hub上面现成的镜像, 自己在centos6的镜像上派生了一个.  因为docker的网络是基于nat的, 所以也做了端口映射. 另外把本地的一个开发目录挂载到nginx的html目录. 这样基本上就算完工了.

虽然给容器指定了2G内存, 但实际上容器并不会像虚拟机一样把所有的内存事先分配掉. 所有的内存是共享的, 未分配的内存宿主机依然可以拿来做其它的用途. 这是容器明显优于虚拟机的地方.

查看更多...

分类:WEB服务器 | 固定链接 | 评论: 0 | 查看次数: 131049

贴吧自动删贴怎么办

 百度贴吧在百度系的产品里权重算是比较高的, 有时还可以给我们带来不少的流量. 但是当我们刚发完贴去看主题列表, 经常会发现没有我们刚发的帖子. 这种情况十有八九是被百度系统给删除了. 

百度贴吧有一套自动扫描系统, 新发的帖子都会经过这个系统的过滤. 但是实际上这个系统真的很傻B, 有时候正常发贴会被删, 发一些无意义的东西甚至广告却啥事没有.

实际上大小吧主看到我们发贴是很高兴的,基本上不太会随意删除. 我们主要要对付的就是百度的这套自动过滤系统.

好的, WEB应用开发网来教你怎么对付这套人工智能

查看更多...

分类:智慧人生 | 固定链接 | 评论: 0 | 查看次数: 139701

工欲善其事必先利其器, 没有良好的装备,怎么在各种微信群里面抢得到红包呢? 你有足够高端的手机, 也有足够快的网速, 还有一根灵敏的手指和一双敏锐的魔眼, 只能说你比较有优势,却未必就能在千军万马中抢到红包。你不可能每时每刻都盯着手机吧?你总得从裤兜里掏出手机, 再打开微信才能抢到吧?而在这个时候, 有的人, 就是在手机发出“叮咚”一声的时候,手机还在裤兜里就已经完成了抢红包。

完成自动抢红包需要一些软件, 但这些东西并不复杂,还都是免费的。网络上都可以找到。

查看更多...

分类:下载专区 | 固定链接 | 评论: 0 | 查看次数: 140075

微信支付接口开发 视频教程

## Part1

 
### 准备工作:
 
0. 注册公众号
1. 认证公众号
2. 开通微信支付
3. 取得公众号appid & secret
4. 取得微信支付 商户号 & paysecret & 支付证书
 
### 步骤:
 
0. 取得用户的openid
1. 创建商户自己的订单
2. 统一下单
3. H5调起支付API
4. 处理支付通知(成功/失败)
 
### 安全性
 
微信支付整个过程中是否存在不安全性

## Part2
 
微信支付中的各种坑

## Part3
 
PHP实战开发

查看更多...

分类:PHP教程 | 固定链接 | 评论: 0 | 查看次数: 138230