# 简单安全防护 ## 一、服务器防护 ### 1. 端口防护 > 尽量将端口禁用,尽量不要将端口暴露在公网,尽量仅供127.0.0.1访问 > 如非必要,尽量不要将服务暴露在公网,尤其是数据库等服务 > 设置连续登录失败禁用一段时间,防爆破 ### 2. 网站防护 > 攻击者一般直接使用ip来攻击网站,可以将ip访问的默认网站只写一个首页 > 上述不利于搜索引擎收录,可以将搜索引擎的域名加入白名单使用Nginx转发 > 避免Js操作cookie,开启HTTP_ONLY ### 3. web容器配置 > Nginx提供限制访问模块,防护CC与DDOS > limit_conn_zone $binary_remote_addr > zone=perip:10m; limit_conn_zone $server_name zone=perserver:10m; > limit_req_zone $binary_remote_addr zone=allips:10m rate=10r/s; ### 4. 独立用户 > 服务器设置用户启动某服务,非该服务用户不允许访问与执行 ## 二、PHP防护 ### 1. 禁用系统函数 > 非常危险的函数 > eval > system > exec > shell_exec > pcntl_exec > pcntl_fork > pcntl_exec > 强烈建议禁止的函数 > passthru > putenv > chroot > chgrp > chown > popen > proc_open > ini_alter > ini_restore > dl > openlog > syslog > readlink > symlink > popepassthru > pcntl_alarm > pcntl_waitpid > pcntl_wait > pcntl_wifexited > pcntl_wifstopped > pcntl_wifsignaled > pcntl_wifcontinued > pcntl_wexitstatus > pcntl_wtermsig > pcntl_wstopsig > pcntl_signal > pcntl_signal_dispatch > pcntl_get_last_error > pcntl_strerror > pcntl_sigprocmask > pcntl_sigwaitinfo > pcntl_sigtimedwait > pcntl_getpriority > pcntl_setpriority > imap_open > apache_setenv ### 2. ThinkPHP > 1. 及时打补丁,ThinkPHP发布的漏洞警告务必及时跟进打补丁 > 2. 设置全局过滤规则 DEFAULT_FILTER ,防止XSS、SQL注入等 > 3. 查询条件尽量使用数组方式,如果必须使用字符串,那么建议使用预处理机制 > 4. 启动目录务必设置在内部目录,即TP建议的public目录下,防止恶意浏览扫描目录,并且public目录下除了静态资源和启动入口外不要放置其他文件 > 5. 上传文件使用TP提供的Think\Upload类,提供对文件的类型、后缀、大小及上传文件的合法检查 > 6. 使用强制路由模式,在route.php中配置可访问的路由,未定义的路由访问一律会自动抛出异常 > 7. 对于有明确类型的请求变量,可以在使用param方法的时候使用类型强制转换