Posts Tagged php

加固PHP环境

  PHP作为Apache的模块运行时,Apache本身的安全起主导作用,因此如果配置正确的话,PHP应该是一个十分安全的环境,但是如果PHP是以CGI方式来运行的话,就没有这么安全了。

  本文中提到的操作,对Unix和Windows都适用。

  一、作为Apache模块来运行

  因为一般说来,Apache会以“nobody”或者“www”来运行,所以,PHP作为模块是十分安全的。

  如果PHP在虚拟主机环境下,可能会产生用户能浏览其他用户文件的危险。一个简单的脚本如下:

  
  // 假定文档根位于 /usr/local/websites/mydomain

   $location = ../; // 到上一级目录
   $parent = dir( $location);

  // 显示当前目录: /usr/local/websites
  while( $entry =  $parent->read()) {
  echo  $entry .
;
  }
   $parent->close();
  ?>

  这样,只要修改 $location,用户就可以浏览虚拟主机上所有其他用户的文件了。为了减少这样的危险,我们需要看一下php.ini ,修改其中的safe_mode, doc_root和usr_dir 参数,把用户限制在他自己的虚拟主机环境下:

  safe_mode = On
  doc_root = /usr/local/apache/htdocs
  user_dir = /home/albertxu/htdocs

  二、作为CGI

  把PHP以CGI方式运行需要十分小心,可能会泄露你不想让人知道的信息。

  第一件事情要注意的就是一定要把执行文件放到文档根目录以外的地方。例如/usr/local/bin,因此所有的CGI文件开头必须带有:

  #!/usr/local/bin/php

  防止用户直接调用CGI的办法是在Apache中强迫CGI重定向:

  Action php-script /cgi-bin/php.cgi
  AddHandler php-script .php

  这会把下面的URL

  http://example.com/mywebdir/test.htm

  转换为:

  http://example.com/cgi-bin/php/mywebdir/test.htm

  在以CGI方式编译PHP时,最好采用下面的选项:

  –enable-force-cgi-redirect

,

No Comments

GMT与UTC

0.时标

时标意指一种将时间分配到事件的制度。现时有两类时间标准广泛被采用。一种是基于天文学,另一种则以原子振动的频率作为依据。

1.视太阳时

视太阳时是一种源于太阳所见位置的时间标准。日晷可直接显示视太阳时。

2.UT0
由 于地球轨道并非圆形,其运行速度又随着地球与太阳的距离改变而出现变化,因此视太阳时欠缺均匀性。视太阳日的长度同时亦受到地球自转轴相对轨道面的倾斜度 所影响。为着要纠正上述的不均匀性,天文学家计算地球非圆形轨迹与极轴倾斜对视太阳时的效应。平太阳时就是指经修订后的视太阳时。在格林尼治子午线上的平 太阳时称为世界时(UT0),又叫格林尼治平时(GMT)。

3.UT1
UT1 与 UT2 是两种较 UT0 均匀的时标。随着较为精确的时钟面世,天文学家发现在不同地点量度的世界时出现差别。这种差别是由于地轴摆动而引起的。各地天文台详细测量了地轴摆动的影响后,制定了一种称为 UT1 的新时标将这种影响删除。

4.UT2
在时钟的精确度进一步改进后,又发现 UT1 具有周期性变化。这种变化是由地球自转率的季节性变动引起的。上述影响经修正后,得到一种更加均匀的时标称为 UT2。

5.国际原子时(TAI):

1967年的第13届国际度量衡会议上通过了一项决议,采纳以下定义代替秒的天文定义:一秒为铯-133原子基态两个超精细能级间跃迁辐射9,192,631,770周所持续的时间。国际原子时是根据以上秒的定义的一种国际参照时标,属国际单位制(SI)。

国际原子时标是一种连续性时标,由1958年1月1日0时0分0秒起,以日、时、分、秒计算。原子时标的准确度为每日数纳秒,而世界时的准确度则只为数毫秒。

6.协调世界时(UTC):
一 种称为协调世界时的折衷时标于1972年面世。为了确保协调世界时与世界时(UT1)相差不会超过0.9秒,有需要时便会在协调世界时内加上正或负闰秒。 因此协调世界时与国际原子时(TAI)之间会出现若干整数秒的差别。位于巴黎的国际地球自转事务中央局(IERS)负责决定何时加入闰秒。

No Comments

drupal简介

随着PHP技术的飞速发展,搭建一个专业网站已经变得越来越容易。特别是各种优秀CMS(内容管理系统)的出现,使得网站的开发不需要编程,你所做的主要工作就是下载一些已有模块,下载一些主题风格,定制一些模块,定制一些主题风格,一个专业的网站就建好了。

优秀的CMS系统包括:Drupal、Typo3、XOOPS、TikiWiki、Mambo、PHP-Nuke等,具体见:
http://www.opensourcecms.com/

目前国内比较流行的CMS包括Mambo和XOOPS,他们的国内社区见:
http://www.mambochina.net/
http://xoops.org.cn/

Drupal是一个新的CMS系统,它虽然没有Manbo流行,也没有XOOPS强大,但却是一个非常易用的内容管理系统,可做为个人或大型网站发布、管理、组织不同内容的平台,包含了广为人知的weblog、论坛、投票、新闻聚合、站内搜索、电子商务等功能。

Drupal应该翻译成什么呢?呵呵,觉得还是翻译为“水滴”比较好。Drupal这个词其实是荷兰语Druppel的英语发音,而Druppel在荷兰 语里面是Drop也就是水滴的意思。Drupal的编写者最初选择这个词实在是意外,他本来想注册一个名为“Dorp”的域名,Dorp在荷兰语里是“小 村庄”的意思,英语里其实也有这个名词,但是他一不小心犯了个错误,于是就注册成了Drop,于是也就有了后来的 Drupal。呵呵,所以汉语翻译成“水滴”还是蛮贴切的,听起来也不错了。

有的人把Drupal当作是blog系统,我一开始也是 这样认为的,其实这只是Drupal的一方面的应用,Drupal是一个功能强大的content manage system(cms),在功能设计上它仿照了phpnuke,xoops等的模块化方式,界面上仿照了blog模式。这个程序以极少的代码实现了非常强 大的功能。很多人用“神奇” 两个字来形容它,它是一个完全开放源代码的程序,所以吸引了众多PHP爱好者的目光,很多PHP高手参与了它的开发行列中来了,开发速度非常块,几乎两个 月出一个新版本,modules和skins也越来越多。从官方站点有时上千人的在线情况就可以看出它的受欢迎程度。

在这里可以下载Drupal:
http://drupal.org/

,

No Comments

apache2.2 PHP5.1.1 release

前一段一直没有注意apache的消息,今天在更新ports时发现,PHP已经升级为5.1.1; 原先的www/apache2改成了www/apache20,而新加的www/apache22格外醒目。

新的版本主要重写了认证、缓冲以及大文件支持等多个子系统的代码,看起来似乎不错,还在使用2.1版本的用户该是更新的时候了。

PHP5的升级主要是在安全上,毕竟XML_RPC的漏洞弄得人心惶惶。但是有一个“很要命”的升级可能会影响到很多利用PHP+静态模版转制成动态网站的用户(本站就是一个比较典型的例子):

取消了原先的"{" "}"的表达方式,变成了直接的 “{ ” 和 “}”。

,

No Comments

用PHP生成Google sitemap

Google Sitemaps 是帮助改善您的网站在 Google 索引中的覆盖面的一种便捷方法。 这是一个能够让您直接与 Google 交流的协助式抓取系统。您可以向 Google 提供有关您所有网页的具体信息,如网页的最新修改时间或网页的更改频率,而获得更为智能的抓取。

链接地址 :https://www.google.com/webmasters/sitemaps/siteoverview?hl=zh_CN

该class的原作者为一个保加利亚人,我做了部分的修改,以便其能够支持使用gz压缩文件,节省传输速度。

No Comments

用PHP生成RSS2.0格式的XML

上次贴出过一个生成RSS的php class 可以生成RSS1.0格式的XML,经过我修改后,制作了这个生成RSS2.0版本的。
 
用法没有改变,可以实现平滑过渡。

1 Comment

PHP编程精华

原先看过的一本电子书,里面的实录不错的,涵盖了一般情况下的PHP页面开发。

7-zip压缩

No Comments

一个生成RSS文件的php class

我在原先RSSFeed的基础上增加了 releaseHtml 和 releaseFile两个函数
点击下载文件

使用时如使用 releaseFile,请注意目录权限至少要666以上。

,

No Comments

用FreeBSD的ports安装apache+php+mysql

看到网上有很多介绍apache+php+mysql安装的教程,但大多都是基于源代码编译或者给予RPM包的方式,对于FreeBSD自带的ports安装却鲜有提及,有方便的干嘛弄得复杂呢?

首先确定主机联网

cvsup -h cvsup.freebsd.org /usr/share/example/cvsup/ports-supfile #同步ports

Read the rest of this entry »

, , ,

2 Comments

UTF-8编码的PHPBB简体中文模块

PHPBB的官方站点上对于简体中文的支持仅限于对于GB2312编码的支持。我用的是pgsql而且服务器端的字符编码是UTF-8会出现乱码和数据库连接错误。于是在原有的基础上,我制作了它的UTF-8版本。

No Comments