网站安全设置


目录结构

app
cache
config
lib
logs
public
    |--index.php

只开放public目录给用户访问

目录权限设置

nginx和php-fpm以www用户和用户组运行,www用户是被禁止登录的

cache、logs目录所有者是运行nginx的用户,如www

drwxr-xr-x  6 www  www   4096 Jan 31 21:03 cache

其它目录的所有者是一般用户,如tomener,权限是755,如:

drwxr-xr-x  5 tomener tomener  4096 Aug 26  2015 app

php脚本所有者是一般用户,权限是644

因为static是静态文件目录,上传的文件会在这个目录里面,所以这个目录所有者和所属组是www,既然是用户上传的,所以要禁止执行这个目录下所有php文件

在nginx配置文件中加入

location ~ ^/static/.*\.php$
{
    deny all;
}

禁用一些危险的php函数

disable_functions=passthru,exec,assert,system,chroot,chgrp,chown,shell_exec,proc_open,ini_restore,dl,readlink,symlink,popen,stream_socket_server,pfsockopen,putenv

有个问题,CGI模式(php-fpm)不会用这些函数,但是cli模式很可能用这些函数,怎么办,那就用不同的php配置文件呗,比如,默认都是用的/usr/local/php/lib/php.ini,我们在/usr/local/php/lib下面增加php-cli.ini那么cli模式会自动使用php-cli.ini这个配置文件

禁止访问web目录下面的某个目录和目录下面的文件,如scan

location /static/scan {
    deny all;
    return 403;
}

跨站请求伪造

跨站脚本攻击

SQL注入

登录需加入验证码,并且验证码使用一次后就失效