插件窝 干货文章 Linux服务器防护:保护Web接口免受目录遍历攻击。

Linux服务器防护:保护Web接口免受目录遍历攻击。

文件 防护 目录 遍历 873    来源:    2025-04-11

Linux服务器防护:防止Web接口目录遍历攻击

目录遍历攻击(Path/Directory Traversal)是Web应用中常见的安全威胁,攻击者通过操纵文件路径访问服务器上的敏感文件。以下是针对Linux服务器Web接口的防护方案:

1. 输入验证与过滤

// PHP示例 - 过滤../等路径字符
$filename = basename($_GET['file']);
$filepath = '/var/www/safe_dir/' . $filename;

// Java示例
String sanitized = Paths.get("/safe/base/dir", 
                           request.getParameter("file"))
                       .normalize()
                       .toString();
if (!sanitized.startsWith("/safe/base/dir")) {
    throw new SecurityException("Invalid path");
}

2. Web服务器配置

Nginx防护配置

location ~* \.(php|pl|py|jsp|asp|sh|cgi)$ {
    deny all;
    return 403;
}

location / {
    # 禁止访问隐藏文件
    location ~ /\. {
        deny all;
    }

    # 限制访问特定目录
    try_files $uri $uri/ =404;
}

Apache防护配置

<Directory "/var/www/html">
    Options -Indexes
    AllowOverride None
    Order allow,deny
    Allow from all

    <FilesMatch "\.(htaccess|htpasswd|ini|log|sh|sql)$">
        Order Allow,Deny
        Deny from all
    </FilesMatch>
</Directory>

3. 文件系统权限控制

# 设置Web目录适当权限
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 750 /var/www/html

# 敏感文件保护
sudo chmod 600 /etc/passwd /etc/shadow
sudo chattr +i /etc/passwd /etc/shadow

4. 应用层防护

  • PHP配置 (php.ini):

    open_basedir = "/var/www/html:/tmp"
    disable_functions = "exec,passthru,shell_exec,system"
    allow_url_fopen = Off
    allow_url_include = Off
    
  • 使用Web应用防火墙(WAF):

    • ModSecurity规则示例:
    SecRule REQUEST_URI "@contains ../" "id:1001,deny,msg:'Directory Traversal Attempt'"
    

5. 定期安全审计

# 查找可写的Web目录文件
find /var/www/html -type f -perm -o+w -ls

# 检查SUID/SGID文件
find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \;

# 使用lynis进行安全扫描
sudo lynis audit system

6. 其他最佳实践

  1. 保持系统和所有软件包更新
  2. 使用最小权限原则运行Web服务
  3. 禁用不必要的HTTP方法(OPTIONS, TRACE等)
  4. 实施严格的CORS策略
  5. 日志监控异常访问模式

通过以上多层防护措施,可以显著降低目录遍历攻击的风险,保护服务器上的敏感数据不被非法访问。