PHP防注入小论,目前觉得htmlspecialchars挺好

好久没写博客了,也证明好久都没写代码了。
最近不忙,写代码时可停下来试试每个函数的不同和特性。 之前写PHP对于防注入一直不太注意,这次专门对 htmlspecialchars 、htmlentities、addslashes 几个函数使用了一下。。。

htmlspecialchars 将特殊字符转成 HTML 格式,具体的说,函数会转化以下字符:
& (和号) 成为 &
” (双引号) 成为 "
‘ (单引号) 成为 '
< (小于) 成为 &lt;
> (大于) 成为 &gt;

对应的反编码函数为 htmlspecialchars_decode

htmlentities,将所有的字元都转成 HTML 字串
对应的反编码函数 html_entity_decode

注意 :htmlspecialchars最多只能处理4个html标记,htmlentities是转化全部字符,包括中文。

addslashes是使用反斜线引用字符串,该函数一般都是数据库查询之前就需要处理的必要步骤,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)
对应的反编码函数为stripslashes是还原addslashes引用的字符串。

所以这里一般文本输入输出的话使用 htmlspecialchars和htmlspecialchars_decode,有些文本里面有中文的话,又不支持html的话使用 htmlspecialchars 比较实用。
字段查询可能还是使用 addslashes

ThinkPHP3.1修改X-Powered-By信息

最近发现 ThinkPHP 框架里面把头文件信息里面的 X-Powered-By 改了,这样很明显让人知道是使用的ThinkPHP框架,有个危险的地方就是 万一 ThinkPHP曝出漏洞的话,这是个很明显的目标。所以找了一下修改 X-Powered-By的方法。其实也很简单。。

找到这个文件
ThinkPHP/Lib/Core/View.class.php

里面搜索 ‘header’,能看到有一个是 header(‘X-Powered-By:ThinkPHP’) 只要把这句注释掉,或者修改成其他的就行。

提高开发效率的vim常用命令

基本命令

:e filename Open filename for edition
:w Save file
:q Exit Vim
:q! Quit without saving
😡 Write file (if changes has been made) and exit
:sav filename Saves file as filename
. Repeats the last change made in normal mode
5. Repeats 5 times the last change made in normal mode

继续阅读

也谈用户体验之删掉残缺功能

最近在看一本叫《简约至上》的书,书上说砍掉残缺功能。
对于一个写程序的来说,努力做了一个功能,是最舍不得去掉的。所以每次开做前都要自己衡量一下这个功能到底有用无用。不过看了这张后觉得删掉一些功能实现不是特别好的,也是可以的。
在这里分享这里面关于删掉残缺功能的几句话。也算是这章的总结
功能和内容会给用户造成精神上的负担,会导致一定的维护开支
不要问自己“为什么应该去掉它”,而是“为什么要留着它”

发现百度云盘可以离线下载种子

最近百度收录还挺不错的,所以是该更新下博客的时候了。
不过这段时间好像也没写什么代码,没做什么技术上的事情,也没有什么技术文章写,但前段时间同事推荐了 1T百度云盘,就用了下。这还是第一次发现离线下载,感觉还挺好用的,而且速度也还不错。最关键可以离线下载种子,电影可以在线预览。。。推荐各位用用

现在居然升级到了 2T,哈哈。好大
领取地址 http://yun.baidu.com/1t

debian下sudo的配置和使用

最近想使用PHP输入 命令行,控制服务器。立马就想到了使用 sudo来配置权限。
debian默认情况下已经装了sudo,如果要编辑sudo权限需要用root来操作,或者 输入命令
#sudo visudo

这里 假设要用PHP脚本控制服务器关机和重启,apache,php都是使用apt包安装的。这种情况下 php执行命令的用户默认会是 www-data ,所以编辑权限可以直接在最后一行添加

www-data ALL=NOPASSWD:/sbin/shutdown,/sbin/reboot (如果多个命令用逗号隔开)
(www-data)第一个是允许使用用户,如果前面加 % 则是允许的用户组。
(ALL) 允许登录的所有主机,包括本地和远程
(NOPASSWD) 这里是不用输入密码
(/sbin/shutdown,/sbin/reboot) 这里就是允许的命令了,如果是所有命令的话 直接 ALL 就行了

visudo跟vi又不太一样,退出的话 可以使用 Ctrl+x ,然后会提示 是否保存 输入 y,然后回车。。。

就可以使用 PHP执行这些命令了。。。

<?php
    system("/usr/bin/sudo reboot");  //重启
?>

页面加载完成 出现提示框动画(仿马蜂窝)

前段时间看到马蜂窝旅游频道后,会有个红色的提示框,能很显眼的提示页面的重点部分。。。

用的jQuery动画方法,还挺好用的,值得好好摸索。。。这次就先做个 提示框动画

<!doctype html>
<head>
    <meta charset="utf-8">
    <title>PHP圈</title>
</head>
<body>
<p><img class="logo" src="http://www.zjcampus.com/rs/img/logo.png" width="186" height="69"></p>
<script type="text/javascript" src="http://www.zjcampus.com/rs/js/jquery.js"></script>
<script>
(function($){

	/**
	 * 提示框
	 * 参数 to 结束地方的节点
	 */
	var alertBox = function(to){
		var to_p = $(to).position()
		var objNewDiv = $('<div>',{'style':'border:#FF0000 3px solid; width:99%; height:99%;position:absolute; left:0; top:0;'});
		$(objNewDiv).appendTo('body');
		objNewDiv.animate({left:to_p.left, top:to_p.top, width:$(to).width(), height:$(to).height()},2000,function(){
			//动画完后 在延时1秒
			objNewDiv.delay(1000).hide(0,function(){ objNewDiv.remove();});
		});
	}

	alertBox('.logo');
})(jQuery);
  </script>
</body>
</html>

rsync常见错误及解决办法

问题一:
@ERROR: chroot failed
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器端的目录不存在或无权限。创建目录并修正权限可解决问题。

问题二:
@ERROR: auth failed on module tee
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败。提供正确的用户名密码解决此问题。

问题三:
@ERROR: Unknown module ‘tee_nonexists’
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题。

问题四:
password file must not be other-accessible
continuing without password file
Password:
原因:
这是因为rsyncd.pwd rsyncd.secrets的权限不对,应该设置为600。如:chmod 600 rsyncd.pwd

问题五:
rsync: failed to connect to 218.107.243.2: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=2.6.9]
原因:
对方没开机、防火墙阻挡、通过的网络上有防火墙阻挡,都有可能。关闭防火墙,其实就是把tcp udp的873端口打开。

问题六:
rsync error: error starting client-server protocol (code 5) at main.c(1524) [Receiver=3.0.7]
原因:
/etc/rsyncd.conf配置文件内容有错误。请正确核对配置文件。

问题七:
rsync: chown “” failed: Invalid argument (22)
原因:
权限无法复制。去掉同步权限的参数即可。(这种情况多见于Linux向Windows的时候)
问题八:
@ERROR: daemon security issue — contact admin
rsync error: error starting client-server protocol (code 5) at main.c(1530) [sender=3.0.6]
原因:
同步的目录里面有软连接文件,需要服务器端的/etc/rsyncd.conf打开use chroot = yes。掠过软连接文件。

rsync同步备份使用方法

最近在玩树莓派,想直接在树莓派上备份东西。基本上rsync同步备份已经搞定,接下来还有 树莓派外接硬盘(估计整个有源的usb hub就行),网站实时备份。
首先在本地机器上配置 rsync服务器端,linux大多数都已经默认装了rsync。

centos和redhat这样安装
yum install rsync

ubuntu和debian这样安装
sudo apt-get install rsync 继续阅读

PHP设置脚本最大执行时间的几种方法

一、在php.ini里面设置

max_execution_time = 45; 

二、通过PHP的ini_set 函数设置

ini_set("max_execution_time", "45");

三、通过set_time_limit 函数设置

set_time_limit(45); 

以上几个数字设置为0 则无限制,默认一般是30秒。偶尔有特殊情况,可以在脚本里面使用函数修改