问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何解决nginx ssi解析include路径问题

发布网友 发布时间:2022-08-13 08:32

我来回答

1个回答

热心网友 时间:2024-04-30 05:22

<!–# include virtual=”../../test/test.htm”–> 这种语法格式在apache下木有问题,在nginx就使用不起
nginx 下 <!–# include virtual=”/test/test.htm”–>这种就能用,说明一点nginx解析的时候 不支持”..”路径!
问题应该可以解决 ,毕竟nginx是开源的。
顺便也验证了我之前文章里《工作5年多了,对所处行业环境及技能的一些认识!》提到的为什么开源比闭源的强的原因?
花了点时间 看了一下nginx 的源码 ,如下两个重要的文件表示是ssi模块
src/http/moles/ngx_http_ssi_filter_mole.h
src/http/moles/ngx_http_ssi_filter_mole.c 这个文件里 的函数 ngx_http_ssi_include 应该就是解释include指令
这个函数 里面 NGX_HTTP_LOG_UNSAFE ,NGX_HTTP_SSI_ERROR 表示的nginx错误信息处理。
那么就找到对应的函数ngx_http_parse_unsafe_uri 在src/http/ngx_http_parse.c里函数具体如下:

gx_int_t
ngx_http_parse_unsafe_uri(ngx_http_request_t *r, ngx_str_t *uri,
ngx_str_t *args, ngx_uint_t *flags)
{
u_char ch, *p;
size_t len;

len = uri->len;
p = uri->data;

if (len == 0 || p[0] == '?') {
goto unsafe;
}

if (p[0] == '.' && len == 3 && p[1] == '.' && (ngx_path_separator(p[2]))) {
goto unsafe;
}

for ( /* void */ ; len; len--) {

ch = *p++;

if (usual[ch >> 5] & (1 << (ch & 0x1f))) {
continue;
}

if (ch == '?') {
args->len = len - 1;
args->data = p;
uri->len -= len;

return NGX_OK;
}

if (ch == '\0') {
goto unsafe;
}

if (ngx_path_separator(ch) && len > 2) {

/* detect "/../" */

if (p[0] == '.' && p[1] == '.' && ngx_path_separator(p[2])) {
goto unsafe;
}
}
}

return NGX_OK;

unsafe:

if (*flags & NGX_HTTP_LOG_UNSAFE) {
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
"unsafe URI \"%V\" was detected", uri);
}
return NGX_ERROR;
}

看到 这个 /* detect “/../” */ 注释 你就会明白为什么 不能执行这样的路径 ../../test/test.htm
nginx: 这样的路径存在安全隐患的。
安全的作法不修改nginx,调程序本身的路径,这里就不讨论了,目前的站点木有办法,要用就需要修改ssi模块,再重新编译nginx
修改如下:
src/http/moles/ngx_http_ssi_filter_mole.c 这个文件函数 ngx_http_ssi_include里注释掉

if (ngx_http_parse_unsafe_uri(r, uri, &args, &flags) != NGX_OK) {
return NGX_HTTP_SSI_ERROR;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
儿歌祖国妈妈我爱你是谁写的汇总28句 为什么有的人学几何很厉害数学却不行 一个人数学几何好,但是其他计算方面的都马马虎虎,那么说明这个人怎么... 数学几何好的人,就是一道几何题很快就能想出来的人是不很聪明?这能练... 固安尚城国际怎么样 驾驶员咨询服务营业执照经营范围怎么写 驾校属于什么经营范围 核桃粉保质期多长时间 亿生康宝筋骨冷敷凝胶只在国内销售吗? 清河镇概况 ...点三十九分出生,请各位比较专业的大师给起个名字! 姝婷这个名字的意思是什么 函授 图像信息采集 照片下载 图像采集控件下载了电脑上怎么找不到 健康码可以截昨天的屏吗。 安康码可以截图发给别人吗 微信其它截图都能发,就是健康码截图不能发 公司分在不同省份运营,作为一个管理者,如何做好两地管理?有那些手段或 ... 用一个营业执照在两个省开银行账户,资产负债表可以各公司单独编报吗?帐... 同一名字的公司可以在两个城市注册吗? 抖音上的nike soho染鞋多贵,中国有卖吗? 请问耐高温胶带的特点是什么 怎么区分普通,耐温。高纹美纹纸胶带它的主要用途和特性最好仔细的_百... 有哪些小诀窍可以增强宝宝记忆力? 宝宝记忆力差,后天应该如何提升记忆力? Angelababy海边大片明艳动人,你觉得baby适合这个造型吗? 集体土地分配该怎么分 土地分配的方法主要是以什么为单位 镇江腾悦网络科技服务企业(有限合伙)怎么样? 去冠县实高当老师怎么样 为什么我会梦到未来 为什么总梦到自己的未来 萌妖来袭微氪中氪重氪怎么玩? 萌妖来袭(天降财神)开服冲榜攻略 萌妖来袭适合长期玩吗? 萌妖来袭在哪里有新手教程? 玩萌妖来袭用哪个游戏盒子好? 萌妖来袭(天降财神)微氪能玩多久? 类似萌妖来袭的回合制手游有哪些? 萌妖来袭前期氪金买什么比较好? 萌妖来袭充钱攻略教程有吗? 萌妖来袭如何冲榜霸服? 很多新娘在结婚做造型的时候都会参考韩式新娘发型,韩式新娘发型怎么做... 结婚时,韩式新娘头纱造型是什么样子的? 鸡脯肉如何腌制好吃 蜂蜜泡红桃k有互作用吗 男生最好听的网名 适合男生的网名 xftp怎么连接2个Windows主机 必采纳porridge造句 星期几,我吃什么,我干了什么英语造句不少于五句的英语答案