重燃你的PHP安全之火
对于脚本安全这个话题好像永远没完没了,如果你经常到国外的各种各样的bugtraq上,你会发现有一半以上都和脚本相关,诸如SQL
injection,XSS,Path Disclosure,Remote commands execution这样的字眼比比皆是,我们看了之后的用途难道仅仅是抓肉鸡?对于我们想做web安全的人来说,最好就是拿来学习
,可是万物抓根源,我们要的不是鱼而是渔。在国内,各种各样的php
程序1.0版,2.0版像雨后春笋一样的冒出来,可是,大家关注的都是一些著名的cms,论坛,blog程序,很少的人在对那些不出名的程序做安全检测,对于越来越多的php程序员和站长来说,除了依靠服务器
的堡垒设置外,php程序本身的安全多少你总得懂点吧。
有人说你们做php安全无非就是搞搞注入和跨站什么什么的,大错特错,如果这样的话,一个magic_quotes_gpc或者服务器里的一些安全设置
就让我们全没活路了:(。我今天要说的不是注入,不是跨站,而是存在于php程序中的一些安全细节问题。OK!切入正题。
注意一些函数
的
过滤有些函数在程序中是经常使用的,像
include(),require(),fopen(),fwrite(),readfile(),unlink(),eval()以及它们的变体函数
等等。这些函数都很实用,实用并不代表让你多省心,你还得为它们多费点心。 :)
1.include(),require()和
fopen(),include_once(),require_once()这些都可以远程调用文件,对于它们的危害,google搜一下你就会很明
了,对于所包含调用的变量没过滤好,就可以任意包含文件从而去执行。举个例子,看print.php……
if (empty ($bn) ) { //检查是变量$bn是否为空include ("$cfg_dir/site_${site}.php"); //把$cfg_dir这个路径里的site_${site}.php包含进来……
不管存不存在$cfg_dir目录,$site这个变量你可以很自然的去使用,因为他根本没检查$site变量啊。可以把变量$site指定远程文件去
调用,也可以是本地的一个文件,你所指定的文件里写上php的语句,然后它就去包含执行这个含有php语句的文件了。就像这样列出文件目录甚至可以扩展到
包含一些管理员文件,提升权限,典型的像以前phpwind,bo-blog的漏洞一样。除了依靠php.ini里的allow_url_fopen设为
off禁止远程使用文件和open_base_dir禁止使用目录以外的文件外,你还得事先声明好只能包含哪些文件,这里就不多说废话了。
2.fopen(),file(),readfile(),openfile(),等也是该特别留意的地方
相关文档:
先看看下边这段PHP代码。这段使用ip2long函数,对同一个IP进行转换。当然,也有人认为58.99.011.1和058.99.011.1算不上合法的
IP,那就Return,此文对你没有帮助。
为什么要使用带前导零的ip:为了在数据库中查询,这个可以在IP库中定位到ip所对应的位置信息。虽然没有整型的IP查询效率高,但毕竟直观啊。
view ......
仿GOOGLE和Discuz分页函数(php)
这个函数只需要2个参数 当前页码和总页数,$site是路径,文件名可以按自己的需要修改
这个函数不能传递其他参数,如果要传递其他参数,在函数里自己加一个参数就行了
<?php
//计数
$sql = “SELECT count(*) from `andycms_title`;”;
$numrs = mysql_query($sql) or ......
国庆长假将至,真是开心。这两天有点小空,翻译了手册中的一些内容,算是给PHPer们的一个小礼物。
本来想把所有PHP5.3的新内容给更新了,但发现手册有很大的改动,尤其是一些目录结构上的发动。必须先跟上这些改动,否则编译会出错,更谈不上进一步的翻译。
这两天主要做了以下工作:
1. 将翻译平台迁移到SVN
PHP官方的 ......
3DES(即Triple DES)是DES向AES过渡的对称性加密算法,它使用3条64位的密钥对数据进行三次加密。是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。比起最初的DES,3DES更为安全。
PHP利用扩展库Mcrypt来实现DES加密,这种加密的好处主要是不同的语言平台数据可以进行交互加密传输,防止 ......
之前一直都是在服务器调试程序,有一天想弄到本地来,可死活就是连不上远程服务器了。
本地:windows+apache。
远程服务器:windows+ms sql 2008.
php和apache该配置的都配了,其他程序也可以运行,可就是连不上数据库。
苦苦寻觅 ......