写在前面: 地震已经发生了, 关注你需要关注的, 一直盯住一种或两种固定的媒体总会出问题.
mod_security:
(实话说 mod_security 令人恶心.)
SecFilterOutput On
SecFilterSelective OUTPUT "<?php" log,deny
注: 如果你正常想输出的话, HTML 代码中应该是 “<?php” (偶是手写的, 应该没错?)
<ifmodule !mod_php.c>
<filesmatch ?.php$?>
Order allow,deny
Deny from all
Allow from none
</filesmatch>
</ifmodule>
DefaultType application/x-httpd-php
<?php include( 'a/path/outside/wwwroot/config.php'); ?>
=======
htpasswd generator:
(应该没人想过它是这么做的? 不相信某些网站的 htpasswd 生成器的同学看过来.
不过这样的东西, 显而易见的漏洞. 如果跑字典的话, 对一个密码需要生成 64^2 = 4096 个对应的加密值)
代码未经严格测试.
function htaccess_verify($pass1, $pass2) {
return (crypt($pass1,substr($pass2, 0, 2)) === $pass2);
}
function htaccess_gen($user, $pass, $salt='') {
$rand64= "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
srand((double)microtime()*1000000);
$random=rand();
if (!$salt) $salt=substr($rand64,$random % 64,1).substr($rand64,($random/64) % 64,1);
$salt = substr ($salt, 0, 2);
echo $user. ':' . crypt($pass, $salt);
}
=======
disabled_functions:
system,passthru,shell_exec,exec,proc_open,popen
virtual,getmyuid,getmypid,getenv,putenv,get_current_user –至少偶能看出来用没用 suexec 一类的东西
pcntl_exec,pcntl_fork — 推荐不编译.
ini_restore,ini_set,ini_get,ini_get_all,get_cfg_var –get_cfg_var,ini_get,ini_get_all 存疑, ini_alter= ini_set.
chmod,chown,chgrp — 存疑
leak
set_time_limit
php_uname,phpinfo
fsockopen,pfsockopen
highlight_file — show_source
ftp_connect,ftp_ssl_connect –ftp, sftp(if openssl available)
shmop_open –shmop
socket_create — socket
curl_init –curl 是安全隐患, 能够跳过 open_basedir, allow_url_fopen.
mail –偶从来不配这样的环境, 不过…
tmpfile — 受 open_basedir 影响, 偶不用 
extension_loaded, dl —-如果需要加载的话… 
syslog,openlog –偶是不封的, 大量应用.
什么? 懒人? ok.
一般:
system,passthru,shell_exec,exec,proc_open,popen,virtual,getmyuid,getmypid,getenv,putenv,
get_current_user,pcntl_exec,pcntl_fork,ini_restore,ini_set,leak,fsockopen,pfsockopen,
highlight_file,ftp_connect,ftp_ssl_connect,shmop_open,socket_create
增强:
ini_get,ini_get_all,get_cfg_var,php_uname,phpinfo,curl_init,tmpfile,chmod,chown,chgrp,set_time_limit
另外几个存疑:
set_error_handler –自己写函数输出?
track_errors = 0 ?
(看的资料还太少, 估计这些也不够完整)
=======
allow_url_fopen = 0
display_errors = 0
error_log = “syslog” –这可是个大好的习惯.
=======
开发用的机器嘛, 统一 Apache(装偶挑选的性能/调试相关的 ext) , 使用一般的 disabled_functions.
docref_root 设置成内部镜像 or cn.php.net/cn2.php.net (这两个在偶这里都很快…)
=======
需要 disable eval 的环境, 使用 suhosin(hardened-php):
suhosin.executor.disable_eval