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)