首页 > php100

PHP与其它CGI的比较

无可置疑的,写 CGI 的方式有很多种,而 PHP 只是其中的一种选择罢了。对资深的 Webmaster 而言,CGI 的写作界面应是随着需求而改动。毕竟,在一个对系统反映速度要求极严格的系统而言,恐怕只有 NSAPI 界面写的 CGI 程序才能符合要求了。在其它的场合,相信使用 PHP 来作为 CGI 的界面是游刃有余,而且是最适合的。

程序界面PHPASPCGINSAPI ISAPI
操作系统均可 Win32 均可 均可 Win32
Web服务器数种 IIS 均可 Netscape Server IIS
执行效率极快 极快
稳定性中等 最高
开发时间中等
修改时间中等
程序语言PHP VB 不限 C/C++ C/ Delphi
网页结合
学习门槛极高
函数支持不定 中等
系统安全极差 最佳 尚可
使用网站超多 极少
改版速度


阅读全文

PHP站点安全配置教程

本文通过介绍一些技巧介绍了针对PHP木马攻击的防御之道,通过这些方面你可以更好的防范木马程序。
1、防止跳出web目录
首先修改httpd.conf,如果你只允许你的php脚本程序在web目录里操作,还可以修改httpd.conf文件限制php的操作路径。比如你的web目录是/usr/local/apache/htdocs,那么在httpd.conf里加上这么几行:
php_admin_value open_basedir /usr/local/apache
/htdocs
这样,如果脚本要读取/usr/local/apache/htdocs以外的文件将不会被允许,如果错误显示打开的话会提示这样的错误: 
Warning: open_basedir restriction in effect. File is in wrong directory in 
/usr/local/apache/htdocs/open.php on line 4 
等等。 
2、防止php木马执行webshell 
打开safe_mode, 
在,php.ini中设置 
disable_functions= passthru,exec,shell_exec,system
二者选一即可,也可都选
3、防止php木马读写文件目录 
在php.ini中的 
disable_functions= passthru,exec,shell_exec,system
后面加上php处理文件的函数 
主要有 
fopen,mkdir,rmdir,chmod,unlink,dir 
fopen,fread,fclose,fwrite,file_exists 
closedir,is_dir,readdir.opendir 
fileperms.copy,unlink,delfile 
即成为 
disable_functions= passthru,exec,shell_exec,system,fopen,mkdir,rmdir,chmod,unlink,dir 
,fopen,fread,fclose,fwrite,file_exists 
,closedir,is_dir,readdir.opendir 
,fileperms.copy,unlink,delfile 
ok,大功告成,php木马拿我们没辙了,遗憾的是这样的话,利用文本数据库的那些东西就都不能用了。
如果是在windos平台下搭建的apache我们还需要注意一点,apache默认运行是system权限,这很恐怖,这让人感觉很不爽.那我们就给apache降降权限吧。
net user apache fuckmicrosoft /add
net localgroup users apache /del
ok.我们建立了一个不属于任何组的用户apche。
我们打开计算机管理器,选服务,点apache服务的属性,我们选择log on,选择this account,我们填入上面所建立的账户和密码,重启apache服务,ok,apache运行在低权限下了。 
实际上我们还可以通过设置各个文件夹的权限,来让apache用户只能执行我们想让它能干的事情,给每一个目录建立一个单独能读写的用户。这也是当前很多虚拟主机提供商的流行配置方法哦,不过这种方法用于防止这里就显的有点大材小用了。

阅读全文

如何对PHP程序中的常见漏洞进行攻击

之所以翻译这篇文章,是因为目前关于CGI安全性的文章都是拿Perl作为例子,而专门介绍ASP,PHP或者JSP安全性的文章则很少。Shaun Clowes的这篇文章比较全面地介绍了PHP的安全问题,原文可以http://www.securereality.com.au/studyinscarlet.txt找到。

由于原文比较长,而且有相当一部分是介绍文章的背景或PHP的基础知识,没有涉及到PHP安全方面的内容,因此我没有翻译。如果你想了解这方面的知识,请参考原文。

阅读全文

多PHP服务器实现多session并发运行

首先介绍一下session的概念:所谓session是微软首先提出的,在asp中最先集成。由于session的采用,大大方便了web开发员的工作。一时间asp风靡全球。现在php4也加入session的支持,再度显示出open source 的强大力量。和Cookie类似,设计Session的目的也是为了在一个访问期间在不同的页面间传输数据以解决http协议无状态的问题,但Session更加简单、更加安全。Session 中文没有一个统一的译法,我习惯上译为会话。关于session的意义大家都应该清楚: 其实是在浏览某个网站时,在浏览器没有关闭的情形之下,一个web应用的开始和结束。一个...
阅读全文

IIS环境下安装PHP5

1

.要下载2个php的安装包:一个是install版本的,另一个是zip版本的 。

.运行install版本,按照标准模式安装就可以了,安装过程中注意正确选择你的iIS版本。
2000server 选iis4或更高版本 ,2003server选择iis 6.
关联.php,.phtml.php3等文件类型。这里设定d:php作为安装目录

阅读全文

PHP中操作MySQL的需注意的问题

1.每一行命令都是用分号 (;) 作为结束

对于 MySQL ,第一件你必须牢记的是它的每一行命令都是用分号 (;) 作为结束的,但……没有完全绝对的事,在这儿也是一样,当一行 MySQL 被插入在 PHP 代码中时,最好把后面的分号省略掉,例如:

阅读全文

PHP 和 MySQL 开发的8个技巧

LAMP 架构的网站,我以前注重的多是安装/配置方面的,讲述开发的相对较少,因为自己从事开发也少。本文的原文当然也来自:
Published on The OReilly Network (http://www.oreillynet.com/)
http://www.oreillynet.com/pub/a/onlamp/2002/04/04/webdb.html
看了以后,颇有启发,以前开发中遇到的一些问题,迎刃而解。所以翻译出来和大家共享。
1. PHP 中数组的使用

阅读全文

PHP 常见棘手问题答解

在PHP4.2以后的版本中register_global默认为off
若想取得从另一页面提交的变量:
方法一:在PHP.ini中找到register_global,并把它设置为on.
方法二:在接收网页最前面放上这个extract($_POST);extract($_GET);(注意extract($_SESSION)前必须要有Session_Start()).
方法三:一个一个读取变量$a=$_GET["a"];$b=$_POST["b"]等,这种方法虽然麻烦,但比较安全.

阅读全文

如何将PHP作为Shell脚本语言使用

我们都知道,PHP是一种非常好的动态网页开发语言(速度飞快,开发周期短……)。但是只有很少数的人意识到PHP也可以很好的作为编写Shell脚本的语言,当PHP作为编写Shell脚本的语言时,他并没有Perl或者Bash那么强大,但是他却有着很好的优势,特别是对于我这种熟悉PHP但是不怎么熟悉Perl的人。
要使用PHP作为Shell脚本语言,你必须将PHP作为二进制的CGI编译,而不是Apache模式;编译成为二进制CGI模式运行的PHP有一些安全性的问题,关于解决的方法可以参见PHP手册(http://www.php.net)。
一开始你可能会对于编写Shell脚本感到不适应,但是会慢慢好起来的:将PHP作为一般的动态网页编写语言和作为Shell脚本语言的唯一不同就在于一个Shell脚本需要在第一行生命解释本脚本的程序路径:
#!/usr/local/bin/php -q
我们在PHP执行文件后面加入了参数“-1”,这样子PHP就不会输出HTTPHeader(如果仍需要作为Web的动态网页,那么你需要自己使用header函数输出HTTPHeader)。当然,在Shell脚本的里面你还是需要使用PHP的开始和结束标记:

现在让我们看一个例子,以便于更好的了解用PHP作为Shell脚本语言的使用:
#!/usr/local/bin/php -q
print(Hello, world!n);
?>
上面这个程序会简单的输出“Hello, world!”到显示器上。
一、传递Shell脚本运行参数给PHP:
作为一个Shell脚本,经常会在运行程序时候加入一些参数,PHP作为Shell脚本时有一个内嵌的数组“$argv”,使用“$argv”数组可以很方便的读取Shell脚本运行时候的参数(“$argv[1]”对应的是第一个参数,“$argv[2]”对应的是第二个参数,依此类推)。比如下面这个程序:
#!/usr/local/bin/php -q
$first_name = $argv[1];
$last_name = $argv[2];
printf(Hello, %s %s! How are you today?n, $first_name, $last_name);
?>
上面的代码在运行的时候需要两个参数,分别是姓和名,比如这样子运行:
[dbrogdon@artemis dbrogdon]$ scriptname.ph Darrell Brogdon
Shell脚本在显示器上面会输出:
Hello, Darrell Brogdon! How are you today?
[dbrogdon@artemis dbrogdon]$
在PHP 作为动态网页编写语言的时候也含有“$argv”这个数组,不过和这里有一些不同:当PHP作为Shell脚本语言的时候“$argv[0]”对应的是脚本的文件名,而当用于动态网页编写的时候,“$argv[1]”对应的是QueryString的第一个参数。
二、编写一个具有交互式的Shell脚本:
如果一个Shell脚本仅仅是自己运行,失去了交互性,那么也没有什么意思了。当PHP用于Shell脚本的编写的时候,怎么读取用户输入的信息呢?很不幸的是PHP自身没有读取用户输入信息的函数或者方法,但是我们可以效仿其他语言编写一个读取用户输入信息的函数“read”:
function read() {
$fp = fopen(/dev/stdin, r);
$input = fgets($fp, 255);
fclose($fp);
return $input;
}
?>
需要注意的是上面这个函数只能用于Unix系统(其他系统需要作相应的改变)。上面的函数会打开一个文件指针,然后读取一个不超过255字节的行(就是fgets的作用),然后会关闭文件指针,返回读取的信息。
现在我们可以使用函数“read”将我们前面编写的程序1修改一下,使他更加具有“交互性”了:
#!/usr/local/bin/php -q
function read() {
$fp = fopen(/dev/stdin, r);
$input = fgets($fp, 255);
fclose($fp);
return $input;
}
print(What is your first name? );
$first_name = read();
print(What is your last name? );
$last_name = read();
print(nHello, $first_name $last_name! Nice to meet you!n);
?>
将上面的程序保存下来,运行一下,你可能会看到一件预料之外的事情:最后一行的输入变成了三行!这是因为“read”函数返回的信息还包括了用户每一行的结尾换行符“n”,保留到了姓和名中,要去掉结尾的换行符,需要把“read”函数修改一下:
function read() {
$fp = fopen(/dev/stdin, r);
$input = fgets($fp, 255);
fclose($fp);
$input = chop($input); // 去除尾部空白
return $input;
}
?>
三、在其他语言编写的Shell脚本中包含PHP编写的Shell脚本:
有时候我们可能需要在其他语言编写的Shell脚本中包含PHP编写的Shell脚本。其实非常简单,下面是一个简单的例子:
#!/bin/bash
echo This is the Bash section of the code.
/usr/local/bin/php -q << EOF
print(This is the PHP section of the coden);
?>
EOF
其实就是调用PHP来解析下面的代码,然后输出;那么,再试试下面的代码:
#!/bin/bash
echo This is the Bash section of the code.
/usr/local/bin/php -q << EOF
$myVar = PHP;
print(This is the $myVar section of the coden);
?>
EOF
可以看出两次的代码唯一的不同就是第二次使用了一个变量“$myVar”,试试运行,PHP竟然给出出错的信息:“Parse error: parse error in - on line 2”!这是因为Bash中的变量也是“$myVar”,而Bash解析器先将变量给替换掉了,要想解决这个问题,你需要在每个PHP的变量前面加上“” 转义符,那么刚才的代码修改如下:
#!/bin/bash
echo This is the Bash section of the code.
/usr/local/bin/php -q << EOF
$myVar = PHP;
print(This is the $myVar section of the coden);
?>
EOF
好了,现在你可以用PHP编写你自己的Shell脚本了,希望你一切顺利。

阅读全文

用PHP和XML备份MySQL数据库

以下是在Linux下通过Apache+PHP对Mysql数据库的备份的文件代码: 
文件一、Listtable.php (文件列出数据库中的所有表格,供选择备份) 
请选择要备份的表格: 
$con=mysql_connect(localhost,root,xswlily); 
$lists=mysql_list_tables(embed,$con); 
//数据库连接代码 
$i=0; 
while($i$tb_name=mysql_tablename($lists,$i); 
echo .$tb_name. 

//列出所有的表格 
$i++;} 
?> 
文件二、Backup.php 
) header(Location:listtable.php);?>
$con=mysql_connect(localhost,root,xswlily); 
$query=select * from $table 
//数据库查询 
$result=mysql_db_query(embed,$query,$con); 
$filestr=<.?xml version=1.0 encoding=GB2312?.>
$filestr.=<.$table.s>
while ($row=mysql_fetch_array($result)) 
//列出所有的记录 
{$filestr.=<.$table.>
$fields=mysql_list_fields(embed,$table,$con); 
$j=0; 
//$num_fields=mysql_field_name($fields,$j); 
//echo $num_fields; 
while ($j$num_fields=mysql_field_name($fields,$j); 
$filestr.=<.$num_fields.>
$filestr.=$row[$j]; 
$filestr.=
$j++;} 
$filestr.=

$filestr.=
echo $filestr; 
//以下是文件操作代码 
$filename=$table..xml
$fp=fopen($filename,w); 
fwrite($fp,$filestr); 
fclose($fp); 
Echo 数据表.$table.已经备份成功!;?> 
通过以上文件的操作就可以实现对数据库中选定的表格进行备份. 
以上主要介绍了通过PHP实现XML备份数据库的操作方法,其实并不复杂,通过XML,我们可以备份各种各样的数据库,当然也可以通过相关的方法将备份的XML文档恢复到数据库中。



阅读全文