文章归档

github的'\n'文件名漏洞

这几天在部署github的时候发现了一个小问题,恰好我有个文件的名字是包含 'n' 换行符的,push上去之后结果导致整个project webpages不能访问,一直提示:

An unexpected error seems to have occurred. Why not try refreshing your page? Or you can contact us if the problem persists.

排查了很久才发现原来是这个的问题。

n 在ASCII码里属于控制字符,而我们平时一般习惯把文件名这类当作字符流来操作的。比如在某些应用程序间的通信,就很有可能将n当作特殊字来处理。ext等文件系统又默认是支持带n的文件名。所以,后话就来了

我立马发上很多应用程序都不能正确处理这种情况,会出现各种莫名其妙的问题:

  • p7zip仅保留n前面的字符并写到结果文件里面去,但是结果文件的文件名却没有改变
  • gzip可以正常解压缩,但是通过gzip处理的文件,file-roller是不能读取,Segmentation fault. 调试了一下,发现在 gtk_main() 里堆栈崩溃了,也没法跟进去
  • jar和zip等会将n替换成 ^J 这样的字符,或者 ^J
  • rar无法正常工作,根本没法压缩。奇怪的是,通过file-roller来调用rar却可以生成压缩文档,不过没法读取
  • 。。。。。

 

目前的猜想,应该只是webpage的问题,和后端服务器程序没有关系。

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>