Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

小心 nginx rewrite 出安全问题!

  为了保持 URL 的美观,我很喜欢对路由做各种 rewrite。但是写着写着就觉得有点不对劲了!rewrite 是先匹配一个正则,然后可以在目标字符串中使用先前正则匹配的组引用。可是第一个正则匹配的是来自客户端的 URL,直接从 URL 中取片段作为 rewrite 目标真的没问题么?
  有时候我希望 URL 中加某个目录名也能访问到根目录下的文件,于是会这么写: location /dist { rewrite ^/dist(.*) $1; }   匹配由 /dist 开头的 $uri,并将匹配到 /dist 之后的所有字符都放入第一个匹配组中。rewrite 的第二个参数直接写 $1 得到这个匹配组的结果。于是就相当于将 $uri 中前面的 /dist 给去掉了。
  这个看似没问题的写法是有问题的!而且还是安全问题!因为 rewrite 是可以进入一个内部 location 的啊!如果配置中存在一个不该让外部访问到的内部 location,那么通过这个 rewrite 匹配就可能进入,比如:
location /dist { rewrite ^/dist(.*) $1; } location @fuck { return 200 fuck; }
  所以 rewrite 的第二个参数不该完全暴露,至少第一个字符应该是个 slash,比如这样:
location /dist { rewrite ^/dist/(.*) /$1; }
网名:
3.84.186.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^