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 阅读(1) 评论(0) 推荐(0)
摘要: 1,替换-删除-屏蔽 select stuff('abcefg',3,2,'xx') 当第4个参数 不为空时,实际为替换 为空时,相当于删除 为*时,也相当于屏蔽2,高级应用,行转列 ID NAME 1 A 2 B 3 C SELECT stuff((select ',' + NAME FROM T 阅读全文
posted @ 2025-06-23 17:23 sblack 阅读(105) 评论(0) 推荐(0)
摘要: #${my_array[@]} 表示数组的所有元素。#${!my_array[@]} 表示数组的所有索引。#${#my_array[@]} 表示数组的长度。声明一个数组arr=("1" "2" "3" "4" "5")或者tmp="12345"arr=($tmp)#1,利用for循环遍历for it 阅读全文
posted @ 2024-11-15 17:02 sblack 阅读(271) 评论(0) 推荐(0)
摘要: 项目中经常会存在图片不存在而产生的大量请求,导致CDN,或者回源一直拉不到图片,这时候可以在回源上配置一张默认图片进行返回。 server { root /data/wwwroot/html; #精确目录匹配 location /Static/images/icon/ { try_files $ur 阅读全文
posted @ 2024-07-15 16:03 sblack 阅读(207) 评论(0) 推荐(0)
摘要: //要转换的负数$num = -10;//将负数转换为无符号整数的十六进制表示$hex_str = sprintf('%08X', $num & 0xFFFFFFFF);//将十六进制字符串转换为十进制数值$original_num = hexdec($hex_str);//如果最高位是1,表示是负 阅读全文
posted @ 2024-05-02 18:21 sblack 阅读(81) 评论(0) 推荐(0)
摘要: 方法一:curlFile 客户端 $filePath = 'head.txt'; // 创建 CURLFile 对象 $file = new CURLFile($filePath); // 创建 cURL 资源 $ch = curl_init(); // 设置 cURL 选项 curl_setopt 阅读全文
posted @ 2023-12-14 18:27 sblack 阅读(233) 评论(0) 推荐(0)
摘要: #connect to AMQP broker at example.comuse PhpAmqpLib\Connection\AMQPStreamConnection;$amqp = new AMQPStreamConnection('example.com', 5672, 'user', 'pw 阅读全文
posted @ 2023-06-24 15:48 sblack 阅读(121) 评论(0) 推荐(0)
摘要: 根据自己的版本下载相应的redis安装包wget http://download.redis.io/releases/redis-5.0.9.tar.gztar -zxvf redis-5.0.9.tar.gzcd redis-5.0.9cd srcmake这里不用make install会生成re 阅读全文
posted @ 2023-03-29 15:28 sblack 阅读(287) 评论(0) 推荐(0)
摘要: 关键知识点,用key的长度位数来决定使用AES的编码位数: AES-128-CBC = mcrpyt(cipher MCRYPT_RIJNDAEL_128 + key 16位 + iv 16 位 + mode MCRYPT_MODE_CBC)AES-192-CBC = mcrpyt(cipher M 阅读全文
posted @ 2023-02-18 16:13 sblack 阅读(59) 评论(0) 推荐(0)
摘要: 常驻进程-RSA加密公钥私钥RESOURCE没有释放导致内存暴涨内存泄露往往是比较难查找的问题,借助bcc 的memleak工具可以初步判断是哪个类库导致的,知道了哪个类型,可以大概判断是业务流程中哪一部分的代码导致的例如:RSA加密导致内存暴涨用BCC工具会看到类似 /lib64/libcrypt 阅读全文
posted @ 2023-01-12 17:34 sblack 阅读(181) 评论(0) 推荐(0)
点击右上角即可分享
微信分享提示