未来往事

PHP网站安全性浅谈 不指定

Rinald 本站原创 PHP 2016/05/31 17:52
PHP网站安全性浅谈
一、web应用服务安全性设置
1、服务器各应用服务尽可能以独立用户运行,如:
 WEB服务运行帐户为www
 MySQL服务运行帐户为mysql
 Memcached用户为memcache
 Redis运行帐户为redis

2、应用服务目录的读写权限最小颗粒化
(a)缓存目录:
一般需要755/777权限,但是多数情况下缓存目录无须提供给用户访问,可以通过nginx拒绝。如:
location ~ "^/cache" {
  return 403;
}
(b)附件目录:
一般也需要755/777等写入权限,建议附件和程序分离,附件不做PHP配置解析(这点能做到最好)。
如果上面做不到,那么建议你尽可能不去解析附件目录的PHP。如:
location ~* ^/upload/.*.(php|php5)($|/){
    deny all;
}

location ~* .*\.php($|/){
      if ($request_filename ~* (.*)\.php) {
            set $php_url $1;
      }
      if (!-e $php_url.php) {
            return 403;
      }

      fastcgi_pass  127.0.0.1:9000;
      fastcgi_index index.php;
      include fcgi.conf;
}
PS:
+阅读全文
php图片缩放类,php不失真图片缩放类,php高质量缩略图,php缩略图函数,php无损缩放,php图片缩放后模糊解决,图片缩略图质量低解决方法。在PHP网站开发过程中,如果你建立的网站涉及大量的图片处理,必然涉及到图片上传、缩放,而如何保持图片不失真,是很多初级PHP网站开发者比较头疼的一件事,今天未来往事<http://fity.cn>就和大家分享一下如何进行等比例不失真图片缩放。

首先我们来了解几个php函数:
imagepng()http://cn2.php.net/manual/en/function.imagepng.php
注:函数的第三个参数的数值区间控制图片的质量,与imagejpeg()函数不同,imagepng()函数的区间值是0-9 (0表示质量最高,9表示质量最低)。PHP 5.1.2+支持。
imagegif()http://cn2.php.net/manual/en/function.imagegif.php
imagejpeg()http://cn2.php.net/manual/en/function.imagejpeg.php
注:函数的第三个参数控制图片的质量,区间0-100 (0表示质量最低,100表示质量最高. 默认75)

附类代码:
+阅读全文

ueditor1.4上传图片水印 不指定

Rinald 本站原创 PHP 2016/05/11 16:13
ueditor上传图片加水印,ueditor1.4.3 水印,ueditor1.4.3 图片水印,ueditor 1.4.3上传图片添加水印,ueditor图片水印控制

打开UEditor压缩包下php目录中的上传类文件:Uploader.class.php
在上传文件的主要方法下添加调用水印处理方法:

水印处理方法/函数:
+阅读全文
Discuz7.0/Discuz7.2到Discuz X2.0/Discuz X3.0/Discuz X3.2 的升级/转换

Step 1、先升级您的UCenter1.5.x版本到1.6.x版本
UCenter1.6.0程序升级包下载地址:
http://download.comsenz.com/UCenter/1.6.0/UCenter_1.6.0_SC_GBK.zip

官方升级文档:
http://www.discuz.net/thread-2141455-1-1.html

Step 2、升级discuz7.0/7.2到discuz X2.0版本
discuz X2.0程序升级包下载地址:
http://www.discuz.net/thread-2168918-1-1.html

官方升级文档:
http://www.discuz.net/thread-2174726-1-1.html

注意事项:
1、需要先安装X2.0,安装时UCenter填写刚刚升级后的URL即可,安装好X2.0后再做升级转换
2、convert转换程序说明:
 (1)如果是升级转换7.0到X2.0,请下载本转换程序([官方升级文档]2楼的附件):
下载文件 (已下载 219 次)

 运行后界面如图:

点击在新窗口中浏览此图片

 (2)如果是升级转换7.2到X2.0,请直接上传您刚刚下载后的discuz!X2.0根目录下utility下的convert转换程序

点击在新窗口中浏览此图片

3、如果您安装了UCenter Home请在升级转换discuz程序完毕后进行UCenter Home升级

补充一些说明:
+阅读全文

php身份证验证 不指定

Rinald 本站原创 PHP 2016/03/09 22:32
php身份证验证方法,身份证号码验证算法

18身份证号码的结构
  公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。
  排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。
1、地址码
  表示编码对象常住户口所在县(市、旗、区)的行政区域划分代码,按GB/T2260的规定执行。
2、出生日期码
  表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
3、顺序码
  表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
4、校验码计算步骤
(1)十七位数字本体码加权求和公式
  S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和
  Ai:表示第i位置上的身份证号码数字值(0~9)
  Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (表示第i位置上的加权因子)
(2)计算模
  Y = mod(S, 11)
(3)根据模,查找得到对应的校验码
  Y: 0 1 2 3 4 5 6 7 8 9 10
  校验码: 1 0 X 9 8 7 6 5 4 3 2
PS:
1.该程序可以剔除验证码不正确的身份证号码。
2.15位的身份证出生年份采用年份后2位,没有*后1位校验码。
3.完整的身份证18位,*后一位校验位可能是非数字。我们的一个项目,数据库保存前17位数字。

Nginx upstream模块 不指定

Rinald 本站原创 Apache/Nginx 2015/11/18 11:32
Nginx upstream模块使用及介绍:
Nginx upstream模块主要提供数据转发功能,为nginx提供了跨越单机的横向处理能力,使nginx摆脱只能为终端节点提供单一功能的限制,而使它具备了网路应用级别的拆分、封装和整合的战略功能。在云模型大行其道的今天,数据转发使nginx有能力构建一个网络应用的关键组件。当然,一个网络应用的关键组件往往一开始都会考虑通过高级开发语言编写,因为开发比较方便,但系统到达一定规模,需要更重视性能的时候,这些高级语言为了达成目标所做的结构化修改所付出的代价会使nginx的upstream模块就呈现出极大的吸引力,因为他天生就快。作为附带,nginx的配置提供的层次化和松耦合使得系统的扩展性也可能达到比较高的程度。如果你对Nginx反向代理感兴趣,可以查看本博客另外一篇文章《Nginx反向代理安装配置》。

言归正传,下面介绍upstream的用法:

Nginx upstream的分配方式:
1、后端服务器
通过 upstream 可以设定后端服务器,指定的方式可以是 IP 地址与端口、域名、UNIX 套接字(socket)。其中如果域名可以被解析为多个地址,则这些地址都作为 backend。例如:
upstream realserver {
    server a.fity.cn;
    server b.fity.cn:8001;
}

2、负载均衡策略:
Nginx 提供轮询(round robin)、用户 IP 哈希(client IP)和指定权重 3 种方式。
A、轮询(round robin 默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

B、weight(指定权重)
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream pollll{
 server 192.168.2.200 weight=10;
 server 192.168.2.210 weight=10;
}

C、ip_hash(用户ip哈希 client IP)
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
再介绍一个和 ip_hash 配合使用的关键字:down。当某个一个 server 暂时性的宕机(down)时,你可以使用“down”来标示出来,并且这样被标示的 server 就不会接受请求去处理。要注意的是 weight 与 ip_hash 是不能同时使用的,原因很简单,他们是不同且彼此冲突的策略。
例如:
upstream pollserver{
 ip_hash;
 server 192.168.2.200:8001;
 server 192.168.2.210:8002;
 server proxy.fity.cn:8005 down;
}

3、重试策略:
+阅读全文
安装配置Nginx反向代理,Nginx在upstream服务器的反向代理配置,upstream模块介绍,本文基于Debian6 & Debian7  Nginx 1.8编写。

Nginx 、反向代理服务介绍
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 服务器。

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

Nginx因其出色的处理并发连接的能力,越来越多地作为一个反向代理服务器被使用。所谓反向代理,即把Nginx置于用户接入的最前端,监听用户发来的请求,并把它们转发给相应的后端服务器来处理具体的请求。后端服务器可以是缓存服务器(如Varnish、Squid)或是处理动态/静态请求的服务器(如apache/Nginx/lighttpd),在这里不作深入讨论。本文对Nginx反向代理、Nginx在upstream服务器的设置和"proxy_pass"的功能在代码层面进行分析,并讨论在实际生产环境中的使用。

服务安装配置
1、安装 Nginx 与 ngx_http_sub_module 模块
ngx_http_sub_module模块是一个过滤器,它修改网站响应内容中的字符串,这个模块已经内置在nginx中,但是默认未安装,需要安装需要加上配置参数:--with-http_sub_module。反向代理任何网站,一般都只能反向代理首页,如果要替换里面的链接就需要再安装第三方模块with-http_sub_module模块,一般都是下载后编译安装,但是在debian下建议使用dotdeb源来安装nginx。

#追加dotdeb源
echo "deb http://packages.dotdeb.org squeeze all" >>/etc/apt/sources.list
echo "deb-src http://packages.dotdeb.org squeeze all" >>/etc/apt/sources.list
#nginx-full这个包里面包含着所有需要用到的模块
apt-get update
apt-get install nginx-full

至此,安装完毕。如果你在安装过程中遇到错误:Depends libssl0.9.8 (>= 0.9.8m-1) but it is not installable,请点击这里参考本博客另外一篇文章

2、配置Nginx反向代理模式
server {
listen       80;
server_name  g.fity.cn;
index index.php index.html index.htm;       #默认首页

location / {
     #sub_filter http://www.google.com  http://g.fity.cn; #替换URL
     sub_filter_once off; #搜索替换全部行
     proxy_pass http://www.google.com;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header Accept-Encoding ""; #清除编码
      }
  }
配置说明:创建一个g.fity.cn的域名用来反向代理访问www.google.com。

3、至此配置完毕,重启Nginx服务
#/usr/sbin/nginx -t #检查语法是否有错误
#/etc/init.d/nginx restart


配置进阶 - upstream模块
upstream模块使nginx将跨越单机的限制,完成网络数据的接收、处理和转发。
数据转发功能,为nginx提供了跨越单机的横向处理能力,使nginx摆脱只能为终端节点提供单一功能的限制,而使它具备了网路应用级别的拆分、封装和整合的战略功能。在云模型大行其道的今天,数据转发使nginx有能力构建一个网络应用的关键组件。当然,一个网络应用的关键组件往往一开始都会考虑通过高级开发语言编写,因为开发比较方便,但系统到达一定规模,需要更重视性能的时候,这些高级语言为了达成目标所做的结构化修改所付出的代价会使nginx的upstream模块就呈现出极大的吸引力,因为他天生就快。作为附带,nginx的配置提供的层次化和松耦合使得系统的扩展性也可能达到比较高的程度。如果你对upstream模块比较感兴趣可以查看本博客另外一篇文章《Nginx upstream模块》。

Nginx Google反向代理扩展模块ngx_http_google_filter_module

ngx_http_google_filter_module扩展模块介绍
ngx_http_google_filter_module是一个过滤器模块,能够让谷歌镜像更便捷的部署。内建了正则表达式、URI locations和其他复杂的配置。原生nginx模块确保了更加高效地处理cookies, gstatic scoures和重定向。

轻松部署
1、依赖库
pcre 正则
ngx_http_proxy_module 反向代理
ngx_http_substitutions_filter_module 多重替换

下载substitutions扩展:
https://github.com/yaoweibin/ngx_http_substitutions_filter_module

2、依赖库安装过程(略)

3、Nginx重新编译安装
#cd /opt/lnmp1.2-full/src/nginx-1.8.0/

#./configure --user=www --group=www --prefix=/usr/local/nginx \
--with-http_stub_status_module --with-http_ssl_module --with-http_spdy_module \
--with-http_gzip_static_module --with-ipv6 --with-http_sub_module \
--add-module=/opt/ngx_http_google_filter_module \
--add-module=/opt/ngx_http_substitutions_filter_module-master

#make && make install

#cp -rf objs/nginx /usr/sbin/nginx  (覆盖二进制文件)

#service nginx restart
PS:#nginx -V查看版本号及上一次编辑安装的参数

4、基本配置
http配置方式
+阅读全文
Joomla后台登陆报错You do not have access to the administrator section of this site解决:

最近下了个Joomla安装倒腾,然后装完模板后导入了模板QuickSart后,发现后台登录不进去了,提示错误代码:
引用
You do not have access to the administrator section of this site
经过分析大意是登陆的账号没有权限访问管理后台。经过一番研究后,分享以下解决方法:

首先先来了解下几个表(prefix_为自己设定的表的前缀)
prefix_usergroups  //用户分组数据表;用户分组,一般会有Super Users、Public、Administrator等等……
prefix_users       //用户数据表;存放用户的帐密等信息
prefix_user_usergroup_map   //用户关联分组表;存放用户和分组的关联数据

prefix_user_usergroup_map 表中包含两个字段:
user_id       //用户id;对应prefix_users表中指定用户的id值
group_id      //分组id;对应prefix_usergroups表中指定的分组id值
Joomla账户的权限,都是通过用户所关联的分组读取权限;若用户无关联分组,自然不存在任何操作权限,所以会提示以上错误。一个用户可以关联多个分组;一个分组也可用于多个用户;他们之间的关联关系存放在prefix_user_usergroup_map表中。

要给用户分配分组,只需要在prefix_user_usergroup_map表中插入条数据即可,如
假设 prefix_users 表中存在用户admin,其id值为888, prefix_usergroup s表中存在用户分组Super User,其id值为8,那么在 prefix_user_usergroup_map 表中插入数据:user_id为888,group_id为8的数据即可。SQL语句为
插入该语句表示将admin用户分配到Super User的用户分组中;用户admin也就拥有了Super User分组的所有权限了。

linux查找替换目录下文件中包含的字符串-sed命令

查找文件夹下包含字符串的文件
例:查找/opt/web/blog目录下所有包含”demo.fity.cn”的文件。
grep -lr 'demo.fity.cn' /opt/web/blog/*


vim替换单个文件中所有字符串方法
例:替换当前文件中所有demo为blog
:%s/demo/blog/g
#注释:%表示替换说有行,g表示替换一行中所有匹配点


替换文件夹下包含字符串的文件
sed结合grep,例:将目录/opt/web/blog下所有文件中的demo.fity.cn都替换为fity.cn:
sed -i "s/demo.fity.cn/fity.cn/g" `grep demo.fity.cn -rl /opt/web/blog`
人民币大小写转换类 PHP:

使用方法:
+阅读全文
问题描述:默认情况下,Discuz引入jQuery代码后直接使用 $(),运行后会报错。

原因分析:Discuz默认使用了$()作为对象选取函数,刚好与jQuery默认的$()函数重合造成冲突。Discuz $()对象选取函数代码位于static/js/common.js第8-10行:


至此,你应该了解到为么Discuz引入JQuery后为什么会出现部分功能失效或报错的问题。解决方法这里列出2种:

方法一:
在common.js载入之前先载入jQuery.js,不然jquery的$()函数会覆盖common.js的$()函数。然后用到jQuery的$()函数的地方都用jQuery()代替。

方法二:
在common.js载入之后再载入jQuery.js,在调用jQuery的函数前给jQuery赋予一个新的变量,这样也可以保持原有的discuz程序不被更改,新添加的jQuery代码也能正常工作,例如重新对jQuery $()进行赋值为fity:
重新对jQuery进行赋值:

使用示例:

不要创造烦恼 烦恼只是你内心状态的一种投射
不要创造烦恼,不要自找麻烦,以最单纯的态度去应付事情本来的样子。有一些看来像“烦恼制造机”的人,他们总在为不可能发生的事、不足挂齿的小事、烦死也没用的事、事不关己的事烦恼。在日积月累的烦恼中,对别人一个无意的眼神。一句无心的话,都有了疑心病,彷佛在努力地防卫病毒入侵,也防卫了快乐的可能。别人怎样想我们、沮丧怎样包围我们,其实都是我们投射出来的,都是“魔由心中生”。除非你改变你的态度,一定要在你里面找到原因。你必须懂得,烦恼只是你自己内心的投影。

不要在别人的幸福里给自己寻烦恼
幸福,总围绕在别人身边,烦恼总纠结在自己内心。这是世人普遍对烦恼和幸福的理解。孤独的人以为有人说话就没有烦恼,忙碌的人以为无所事事就是幸福。结果呢,有烦恼的依旧难消,不幸福的仍旧悲伤。

我们可能或多或少都会仰望羡慕过别人,觉得别人都比我们幸福,有好的工作、有休息、有自由、有钱、有幸福的家庭,但这只是我们对别人的印象,至于别人有没有觉得幸福,恐怕只有他自己知道。当我们羡慕别人时就会觉得自己过的不幸福,自己的工作不好,自己没有自由,没有钱,但是却没有去珍惜在别人眼里你的幸福。
+阅读全文
PHP自动生成商品订单唯一订单号/编号/货号
示例一:

示例二:
MySQL bin-log功能,bin-log清理及expire-logs-days参数详解

今天突然发现博客不能访问了,登录vps后发现磁盘/根目录可用空间为0:
root@antphp:/:# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/MyDebianVPS-root
                      9.3G  8.8G   0    100% /
tmpfs                 504M     0  504M   0% /lib/init/rw
udev                  493M   76K  493M   1% /dev
tmpfs                 504M     0  504M   0% /dev/shm
/dev/xvda1            228M   18M  199M   8% /boot
/dev/xvdb1            9.9G  2.7G  6.7G  29% /opt
来源:未来往事 http://fity.cn
经过排查发现是mysql bin-log占用了几个GB的空间,对于普通vps来说空间本来就几个GB,所以自然而然也就满了。于是本文呢就在这样的情况产生啦 grin

看了上面内容,你可能会疑惑MySQL bin-log功能究竟有何作用?
1:数据恢复:如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失。
2:主从服务器之间同步数据:主服务器上所有的操作都在记录日志中,从服务器可以根据该日志来进行,以确保两个同步。
简单地说,这些MySQL var目录下的形如mysql-bin.000***的文件是MySQL的事务日志。
PS:缺点是将无法使数据库恢复先前的状态

这里我们查看到mysql-bin log占用了至少大于5GB的空间:
root@antphp:/usr/local/mysql/var# du -sh *
108M    antphp.err
4.0K    antphp.pid
144K    blog@002eyuboya@002ecom
1.1M    mysql
28K     mysql-bin.000001
1.1M    mysql-bin.000002
4.0K    mysql-bin.000003
4.0K    mysql-bin.000004
2.7M    mysql-bin.000005
1.1G    mysql-bin.000006
1.1G    mysql-bin.000007
1.1G    mysql-bin.000008
1.1G    mysql-bin.000009
1.1G    mysql-bin.000010
………………………………
来源:未来往事 http://fity.cn
PS:命令行模式查看:mysql> show binary logs;

MySQL bin-log状态查看/管理
通过查看mysql配置文件我们可以看到该mysql服务的bin-log是开启的状态:
root@antphp:/# cat /etc/my.cnf | grep log-bin
log-bin=mysql-bin
来源:未来往事 http://fity.cn
PS:
1、这一行注释,重启mysql服务即可关闭bin日志的记录
2、命令行模式查看:mysql> show global variables like '%bin%';

MySQL bin-log如何删除清理?
如果没有主从复制,可以通过reset master的方式,重置数据库日志,清除之前的日志文件:
reset master;

但是如果存在复制关系,应当通过PURGE的方式来清理bin日志,语法如下:
PURGE {MASTER | BINARY} LOGS TO 'log_name'
PURGE {MASTER | BINARY} LOGS BEFORE 'date'
来源:未来往事 http://fity.cn
用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除,这样被给定的日志成为第一个。

例如:
+阅读全文
第2页 / 共7页 第一页 « 上一页 1 2 3 4 5 6 7 下一页 » 最后页 [ 显示模式: 摘要 | 列表 ]