镜像回源系统
这个程序的主要功能是实现一个镜像回源系统,具体来说,它可以根据用户请求的文件路径,先检查本地是否存在该文件。如果本地文件存在,则直接返回给用户;如果本地文件不存在,则从远程服务器下载文件并保存到本地,然后返回给用户。以下是程序的主要功能总结:
1. 路径处理与安全检查
获取用户请求的URI:
从 $_SERVER['REQUEST_URI'] 获取用户请求的文件路径(如 /images/logo.png)。
过滤危险字符:
使用正则表达式过滤掉非法字符(如 ..、\0 等),防止路径遍历攻击。
拼接本地文件路径:
将用户请求的路径与本地基础目录拼接,生成完整的本地文件路径(如 /www/wwwroot/123.iyizhou.com/images/logo.png)。
路径安全检查:
使用 realpath() 检查文件路径是否在允许的目录范围内,防止越权访问。
2. 文件类型限制
检查文件扩展名:
只允许下载特定类型的文件(如 jpg、png、css、js 等)。
如果文件扩展名不在允许列表中,返回 403 Forbidden 错误。
3. 远程URL验证
检查远程URL的合法性:
确保远程URL的域名是允许的(如 img.iyizhou.com)。
如果域名不在允许列表中,返回 403 Forbidden 错误。
4. 本地文件检查
检查本地文件是否存在:
如果本地文件存在,直接读取并返回文件内容。
如果本地文件不存在,继续从远程服务器下载。
5. 远程文件下载
使用cURL下载远程文件:
通过 curl_init() 和 curl_exec() 下载远程文件内容。
支持自动跟随重定向(如301、302跳转)。
设置超时时间和文件大小限制(10秒超时,10MB文件大小限制)。
检查HTTP状态码:
如果远程文件不存在(返回404状态码),返回 404 Not Found 错误。
6. 文件保存与返回
保存远程文件到本地:
如果远程文件下载成功,将文件保存到本地路径。
如果目录不存在,自动创建目录并设置权限为 755。
设置文件权限:
将保存的文件权限设置为 644,确保文件可读可写。
返回文件内容给用户:
设置正确的 Content-Type 头(根据文件扩展名获取MIME类型)。
输出文件内容。
7. MIME类型处理
根据文件扩展名获取MIME类型:
使用预定义的MIME类型映射表,返回文件的MIME类型(如 image/jpeg、text/css 等)。
如果扩展名不在映射表中,返回默认的 application/octet-stream。
8. 错误处理
403 Forbidden:
如果路径不安全、文件类型不允许或远程域名不合法,返回 403 Forbidden 错误。
404 Not Found:
如果远程文件不存在,返回 404 Not Found 错误。
9. 性能与安全性优化
路径安全加固:
过滤危险字符,防止路径遍历攻击。
文件类型限制:
只允许下载特定类型的文件,防止下载恶意文件。
远程URL验证:
确保远程URL的域名是允许的,防止恶意URL注入。
权限控制:
确保文件保存到指定目录,并设置安全的文件权限。
总结
这个程序的核心功能是镜像回源,即:
优先从本地返回文件,减少远程请求的开销。
如果本地文件不存在,从远程服务器下载并保存到本地,然后返回给用户。
通过严格的安全检查,确保路径、文件类型和远程URL的合法性,防止恶意请求和攻击。
适用于需要缓存远程静态资源(如图片、CSS、JS等)的场景,能够有效提升性能并增强安全性。
本文链接:http://www.iyizhou.com/?id=4
转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源!