问答文章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
有要业余时间弹古筝的酒店么 古筝演奏师的就业前景怎么样 茶馆里主要放的音乐类型是 日语一级的话什么水平啊 一级到底要求多少词汇啊? WPS右键菜单(win11) 再生缘 我的温柔暴君结局是什么啊?女主最后傻了? 为什么做爱多了没感情了 情侣之间在一起时间长了是不是做爱的时候也懒得接吻了直接进入主题吗... 夫妻性爱后为何丧失了热情 ...点三十九分出生,请各位比较专业的大师给起个名字! 姝婷这个名字的意思是什么 函授 图像信息采集 照片下载 图像采集控件下载了电脑上怎么找不到 健康码可以截昨天的屏吗。 安康码可以截图发给别人吗 微信其它截图都能发,就是健康码截图不能发 公司分在不同省份运营,作为一个管理者,如何做好两地管理?有那些手段或 ... 用一个营业执照在两个省开银行账户,资产负债表可以各公司单独编报吗?帐... 同一名字的公司可以在两个城市注册吗? 抖音上的nike soho染鞋多贵,中国有卖吗? 请问耐高温胶带的特点是什么 怎么区分普通,耐温。高纹美纹纸胶带它的主要用途和特性最好仔细的_百... 有哪些小诀窍可以增强宝宝记忆力? 宝宝记忆力差,后天应该如何提升记忆力? Angelababy海边大片明艳动人,你觉得baby适合这个造型吗? 集体土地分配该怎么分 土地分配的方法主要是以什么为单位 镇江腾悦网络科技服务企业(有限合伙)怎么样? 去冠县实高当老师怎么样 为什么我会梦到未来 为什么总梦到自己的未来 萌妖来袭微氪中氪重氪怎么玩? 萌妖来袭(天降财神)开服冲榜攻略 萌妖来袭适合长期玩吗? 萌妖来袭在哪里有新手教程? 玩萌妖来袭用哪个游戏盒子好? 萌妖来袭(天降财神)微氪能玩多久? 类似萌妖来袭的回合制手游有哪些? 萌妖来袭前期氪金买什么比较好? 萌妖来袭充钱攻略教程有吗? 萌妖来袭如何冲榜霸服? 很多新娘在结婚做造型的时候都会参考韩式新娘发型,韩式新娘发型怎么做... 结婚时,韩式新娘头纱造型是什么样子的? 鸡脯肉如何腌制好吃 蜂蜜泡红桃k有互作用吗 男生最好听的网名 适合男生的网名 xftp怎么连接2个Windows主机 必采纳porridge造句 星期几,我吃什么,我干了什么英语造句不少于五句的英语答案