我正在研究一种有点文档管理系统.最终用户是业务类用户.
我目前只检查并允许上传文件,如果它们是以下之一:
"png|jpe?g|gif|xls|doc|docx|csv|ppt|txt|pdf|rtf"
我的问题是 -
如果我在列表中添加"xml"?他们会引起任何安全问题吗?
我可以添加哪些其他文档类型/扩展名?
要么
我应该检查NOT IN "exe|bat|php|js"
并允许所有其他类型吗?
谢谢你的建议.
我应该检查NOT IN"exe | bat | php | js"并允许所有其他类型?
白名单优于黑名单.有很多很多危险的文件类型比你可能知道的要多.这四个人几乎没有划伤表面.
如果我在列表中添加"xml"?他们会引起任何安全问题吗?
是的,[X] [HT] ML可能包含在提供服务的网站的安全上下文中运行的脚本.允许任何可以将文档上传到您网站的人将JavaScript注入您的网站(窃取cookie,请求伪造等).
但是......它实际上并没有添加任何您尚未拥有的安全问题.因为即使按文件类型/扩展名列入白名单也不安全,这要归功于IE及其错误的类型嗅探.您可以上传.txt
文件,并使用Content-Type: text/plain
标题正确提供,但如果它包含IE认为看起来像HTML的序列,IE将忽略您并将其呈现为HTML-boom,XSS.
(其他任何类型都是如此,但.txt是最容易受到攻击的.)
有两种方法可以解决这个问题:
将所有用户上传的文件从不同的主机名提供给主应用程序站点,以便它们位于不同的JS安全上下文中,并且不共享cookie或身份验证数据.
使用Content-Disposition: attachment
标题为所有用户上传的文件提供服务,以便始终下载它们并且不会在浏览器中显示.
(2)它本身应该是不漏水的,但在过去的实践中,由于浏览器和插件的利用,它已经有办法解决它,所以我不确定我是否完全信任它.(1)自己停止XSS,但它不会阻止其他恶意内容,如包含iframe的HTML文件来利用网站.
所以最好同时做到这两点.