基础环境
- 宝塔centos7(阿里云ecs)
- mysql 5.6(阿里云rds)
- PHP7.0(ThinkPHP5.0)
- redis6.0
- jdk1.8
图片文件目录禁止PHP脚本执行
- 统计站点下的图片文件目录
- 编写NGINX配置项
location ~ public/Upload/(.*).(php)$ { return 403; } - 复制粘贴到宝塔上,网站->选择站点->设置->配置文件,将上面的代码粘贴到上面“#PHP-INFO-START PHP引用配置,可以注释或修改”之上
PHP基础设置
-
高危函数
apache_setenv chgrp chown chroot dl eval exec imap_open ini_alter ini_restore openlog passthru pcntl_alarm pcntl_exec pcntl_exec pcntl_fork pcntl_get_last_error pcntl_getpriority pcntl_setpriority pcntl_signal pcntl_signal_dispatch pcntl_sigprocmask pcntl_sigtimedwait pcntl_sigwaitinfo pcntl_strerror pcntl_wait pcntl_waitpid pcntl_wexitstatus pcntl_wifcontinued pcntl_wifexited pcntl_wifsignaled pcntl_wifstopped pcntl_wstopsig pcntl_wtermsig phpinfo popen popepassthru proc_open putenv readlink shell_exec symlink syslog system -
是否输出详细错误信息
display_errors=false
站点访问日志配置
- 网站->选择站点->设置->配置文件中access_log/error_log后面的log文件存储目录修改为数据盘目录
- 日志分割
- 计划任务->新增任务
- 任务类型:日志分割
- 执行周期:每天 0点 00分
- 切割网站:所有
- 保留最新:>=180份
PHP系统后台上传图片限制
- 接收的文件,断言文件类型必须是可接收的图片类型
png、jpg、jpeg、webp - 优先上传到OSS上,上传完成后删除本地文件
增加站点目录文件监控-inotifywait
- 安装
yum install inotify-tools -y - shell脚本
#!/bin/bash filePath=/mnt/wwwroot/xxx.com # exclude后面的括号内为忽略的文件:日志图片和tp框架的runtime文件夹 inotifywait -mrq --exclude '(.*/*\.log|.*/*\.txt|.*/*\.jpg|.*/*\.png|^$filePath/(runtime.*))' --timefmt '%y/%m/%d %H:%M' --format '%T %w%f %e' -e move,attrib $filePath/ | while read date time file event do case $event in ATTRIB|CREATE) echo 'attrib' echo $file # 如果是PHP文件则移动到shell脚本所在的目录 if [ "${file##*.}"x = "php"x ];then # rm -rf $file # mv $file aaa.del mv $file aaa.del fi ;; MOVED_TO) echo 'move' echo $file # 如果是PHP文件则移动到shell脚本所在的目录 if [ "${file##*.}"x = "php"x ];then # rm -rf $file # mv $file aaa.del mv $file aaa.del fi ;; *) echo 'other' echo $file ;; esac done - 将该shell脚本权限设置为
744 - 启动该shell脚本
nohup /mnt/wwwroot/script.xxx.com/xxx_change.sh & - 在项目启动目录下会生成一个nohup.out文件,记录的有监控到的文件日志
服务器端口
- 22-远程连接
- 80-http
- 443-https
- 8888-宝塔面板,建议更换
- 3306-mysql,建议使用云数据库,关闭服务器的3306端口
- 21-ftp,建议使用git的webhook方式或者docker等方式更新代码
- 其他端口在安全->防火墙菜单中挨个关闭,尤其是不清楚在哪里使用的端口必须关闭
阿里云
- AccessKey
- 禁止使用主账号的AK
- 使用子账号单独设置权限,一般主要是具备管理短信服务和管理对象存储服务
- 禁止存储到程序中,尤其是程序公开到了GitHub等网站中
- 云安全中心
- 绑定手机号,关注阿里云的产品短信通知
- 安全警告处理菜单的中高危提示要优先处理(ECS异地登录、发现后门文件等)
- 漏洞修复和基线检查菜单中的按安全等级抽空修复
- AK泄漏检测菜单中的要第一时间关注
云数据库RDS
- 账号权限设置
- 按业务模块创建账号
- 按表给账号相应的应该有的权限(最小化)
- 例如,A账号拥有user表的访问权限,而user表在系统中是不能删除的,那就要把user表的delete、drop权限去掉
- 例如,交易记录表在系统中是不能被删除、更新的,那就要在所有账号的权限中把交易记录表的delete、drop、update权限去掉
- 安全组设置
- 模式切换为高安全白名单模式
- 新增服务器安全组,网络隔离模式为专有网络
- 新增本地开发组,网络隔离模式为经典网络及外网地址
- sql洞察,开通后可查看所有的sql执行记录