文件上传功能的安全考虑
2008-10-25 08:49
211 查看
文件上传功能的安全考虑
你的服务器在开通HTTP上传文件功能之前,一件很重要的事情你必须考虑:安全,因为不当的设计或配置,将使你的服务器很容易受到攻击.
例如:早期的PHP上传文件脚本及Jsp上传文件的脚本是不安全的.一个问题是我们没有检查用户输入的文件名.这个问题给恶意用户修改服务器文件的机会 (如:系统文件或密码文件).例如:,如果恶意用户输入这样的地址: "../password/password.dat", 我们的PHP或JSP脚本将保存文件到"/file_uploads/../password/password.dat", 这个路径实际是: "/password/password.dat".
下面的技巧可能对你有所帮助,这里我们只提供简要的说明.你可以参考其他的资料以获得更多的信息 .
检查用户端来的一切信息,确保这些信息是安全的。如:
HTTP请求信息包括MIME type,用于描述上传的文件内容,一个恶意用户能够提供一个错误的信息来欺骗你认为上传的内容是另外一种类型.因此你最好不要依赖于HTTP请求所提供的MIME类型 ,而是在服务器端自己检查. 例如:之前有这个问题的像片集程序没有对用户上传文件执行是否是真实的图片文件. 为了增强安全性,我们可以在服务器端使用PHP函数getimagesize来判定用户上传的文件是否是图片.如果getimagesize()返回False 这意味着用户上传的文件并不是一个有效的图片文件,这样的文件应该被拒绝.
HTTP请求信息包含了文件在客户端的原始文件名,一个恶意用户可能提供一个不安全的内容来欺骗你并修改系统或密码文件,这个问题与第二段所描述的是相似的,所以我们不再次描述.
另外,你最好对文件包含特殊的字符或不许在文件名中出现的字符或非英语的字符这种情形有所准备。确保你的WAP/WEB应用程序不会跨掉或在这种情形下会出错.
设置文件大小限制这样用户不能传送太大或太小的文件
不要使用管理员帐号运行WEB服务或应用程序,为他们的应用建立并配置一个特定的帐号. 对这个帐号做文件许可的限制。这样即便是你的WAP/WEB应用程序有安全问题,操作系统也不会许可它作用于系统文件或其他用户.
确保你的WAP/WEB应用程序在出错的时候,不会提供太多的信息给用户, 这些透露的信息可能会帮助恶意用户攻击你的系统.
记录下文件上传的详细日志信息(如时间,用户的IP地址及用户名)及其他的相关事件.虽然日志只会告诉你发生了什么,它们也能帮助你检查针对你的系统发生了什么类型的攻击 及攻击是否成功.
你的服务器在开通HTTP上传文件功能之前,一件很重要的事情你必须考虑:安全,因为不当的设计或配置,将使你的服务器很容易受到攻击.
例如:早期的PHP上传文件脚本及Jsp上传文件的脚本是不安全的.一个问题是我们没有检查用户输入的文件名.这个问题给恶意用户修改服务器文件的机会 (如:系统文件或密码文件).例如:,如果恶意用户输入这样的地址: "../password/password.dat", 我们的PHP或JSP脚本将保存文件到"/file_uploads/../password/password.dat", 这个路径实际是: "/password/password.dat".
下面的技巧可能对你有所帮助,这里我们只提供简要的说明.你可以参考其他的资料以获得更多的信息 .
检查用户端来的一切信息,确保这些信息是安全的。如:
HTTP请求信息包括MIME type,用于描述上传的文件内容,一个恶意用户能够提供一个错误的信息来欺骗你认为上传的内容是另外一种类型.因此你最好不要依赖于HTTP请求所提供的MIME类型 ,而是在服务器端自己检查. 例如:之前有这个问题的像片集程序没有对用户上传文件执行是否是真实的图片文件. 为了增强安全性,我们可以在服务器端使用PHP函数getimagesize来判定用户上传的文件是否是图片.如果getimagesize()返回False 这意味着用户上传的文件并不是一个有效的图片文件,这样的文件应该被拒绝.
HTTP请求信息包含了文件在客户端的原始文件名,一个恶意用户可能提供一个不安全的内容来欺骗你并修改系统或密码文件,这个问题与第二段所描述的是相似的,所以我们不再次描述.
另外,你最好对文件包含特殊的字符或不许在文件名中出现的字符或非英语的字符这种情形有所准备。确保你的WAP/WEB应用程序不会跨掉或在这种情形下会出错.
设置文件大小限制这样用户不能传送太大或太小的文件
不要使用管理员帐号运行WEB服务或应用程序,为他们的应用建立并配置一个特定的帐号. 对这个帐号做文件许可的限制。这样即便是你的WAP/WEB应用程序有安全问题,操作系统也不会许可它作用于系统文件或其他用户.
确保你的WAP/WEB应用程序在出错的时候,不会提供太多的信息给用户, 这些透露的信息可能会帮助恶意用户攻击你的系统.
记录下文件上传的详细日志信息(如时间,用户的IP地址及用户名)及其他的相关事件.虽然日志只会告诉你发生了什么,它们也能帮助你检查针对你的系统发生了什么类型的攻击 及攻击是否成功.
相关文章推荐
- 设计安全的文件上传功能
- wordpress上传附件提示抱歉,出于安全的考虑,不支持此文件类型
- 黄聪:wordpress前台自定义用户,调用wp_editor上传附件提示【抱歉,出于安全的考虑,不支持此文件类型】错误。
- MVC5:使用Ajax和HTML5实现文件上传功能
- php利用iframe实现无刷新文件上传功能的代码
- Spring MVC实现文件的上传和下载的功能
- java实现多文件上传至本地服务器功能
- jquery+ajax 文件上传功能(无ifram嵌套)
- Flex2.0文件上传功能(Flex2.0正式版)
- PHP安全-文件上传攻击
- Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
- 实现一个Ajax模式的文件上传功能有多难?
- PHP.INI配置:文件上传功能配置
- Spring Boot + thymeleaf 实现文件上传下载功能
- SpringMVC图片文件上传功能实现
- 屏蔽 文件上传框 input type='file' 的输入功能
- php 判断文件上传类型与过滤不安全数据
- php实现文件上传下载功能小结
- 利用nginx实现文件上传和进度条功能
- HTML5 File API初探 支持文件拖放上传功能