LNMP安全之-基础环境配置

Linux + Php + Nginx 常用安全配置
nginx配置:
    1,全局过滤常见的XSS,CSRF攻击用到的PHP函数
        - server模块配置
        if($query_string ~* "(call_user_func|invokefunction|assert|eval|base64_decode|system|shell_exec|phpinfo|var_dump|file_put_contents|hex2bin|copy|curl|wget|create_function|array_intersect_ukey|fopen|fputs)") 
        {
                return 403;
        }
        
    2,项目资源路径或者上传目录按白名单或者屏蔽特定后缀的文件访问
         location /LOGPATH/ {
                location ~ \.(py|log|php|txt)$ {
                        deny all;
                }
        }
        
    3,屏蔽API请求nginx的版本返回
        
    
PHP.INI配置:
    1,和nginx一样,屏蔽关键敏感函数
        - disable_functions = system,shell_exec...等
         像eval函数这个全靠PHP.INI里是屏蔽不掉的,所以要借助于nginx设置才能生效,eval这个方法一般是攻击之后最危险的命令,常见的一句话命令都是基于eval这个实现的。
        
    2,open_basedir 配置
        这个可以白名单方式显式的配置PHP可以访问的目录
        
    3,allow_url_include = OFF 
        屏蔽远程包含,类似http:// ftp://开头的地址,避免远程包含
    4,expose_php = Off
        屏蔽抓包看到PHP的版本返回
    
PHP本身:
    1,对外的API接口进行敏感词过滤
        // 检查请求内容是否包含敏感命令
        $requestData = file_get_contents('php://input');
        $suspiciousPatterns = [
            'systemctl', 'service', 'start', 'stop', 'restart',
            '/etc/init', '/bin/bash', 'exec(', 'shell_exec'
        ];
        
        foreach ($suspiciousPatterns as $pattern) {
            if (stripos($requestData, $pattern) !== false) {
                // 记录尝试
                error_log('Security violation: Possible service control attempt: ' . 
                          $_SERVER['REMOTE_ADDR'] . ' - ' . $requestData);
                          
                // 立即中止请求
                http_response_code(403);
                die(json_encode(['error' => 'Security violation detected']));
            }
        }
        
    2,双向的签名验证
        就是api request 和 api response 添加基于规则的签名验证    
        
Linux配置:
    1,对应用垦定设置单独的运行用户
    2,缩小应用的文件权限,基本640够用
    3,确保运行用户无系统层级的访问权限,例如/etc/passwd /etc/systemd 等
    4,确保应用用户无系统服务的访问权限
    5,如果能力有限,更可以对某些服务器做入口和出口的IP限制访问,这个对不参与对外服务的服务器可以使用,或者走代理模式
    6,防火墙,就是开放特定的端口访问80 443 22等
posted @ 2025-08-18 16:12  sblack  阅读(7)  评论(0)    收藏  举报