当前位置: 代码网 > it编程>编程语言>Php > PHP文件上传安全:优化代码有效防范漏洞

PHP文件上传安全:优化代码有效防范漏洞

2024年05月18日 Php 我要评论
说明:任意文件上传漏洞,很多php开发者也会做一些简单的防护,但是这个防护有被绕过的可能。原生漏洞php示例代码:上传一个php文件,提示文件类型错误,使用apipost修改上传的content-ty

说明:任意文件上传漏洞,很多php开发者也会做一些简单的防护,但是这个防护有被绕过的可能。

原生漏洞php示例代码:

上传一个php文件,提示文件类型错误,使用apipost修改上传的content-type,把原先的application/x-httpd-php修改为image/png,则可绕过。
因为:$_files['type']是根据上传文件的content-type获取的,并文件本身的mime-type,而content-type又可以被篡改。

原生漏洞php漏洞优化意见(获取临时文件的真实类型):

对laravel框架,也有同样的问题,别用错函数:

说话得有依据,经过反复的追laravel的源码:

对laravel任意文件上传漏洞优化意见(获取临时文件的真实类型):

使用getmimetype函数。

整体修复意见:

先判断文件后缀,在判断临时文件的mime类型属性,不要根据请求头判断。

扩展:

mime_content_type函数与(new \finfo(\fileinfo_mime_type))->file('file_path')的区别?

检测文件mime类型,还有一个mime_content_type();

  • mime_content_type()获取的mime类型,会与操作系统的mime类型有映射,意味着不同的系统可能存在一些小差别。
  • finfo类使用了 php 的 fileinfo 扩展。fileinfo 扩展利用了文件的特征签名(或称为魔术数字)来检测文件的实际类型,并根据文件的内容进行精确的 mime 类型推断。

虽然两者相差不大,但是推荐用(new \finfo(\fileinfo_mime_type))->file('file_path');

(new \finfo(\fileinfo_mime_type))->file('file_path')与finfo_file()的区别?

使用finfo_file()也可以获取文件的mime类型。

两者底层对获取mime类型的实现无差别,展示写法不同。

什么是文件的魔术数字?

文件的魔术数字是文件头部的一段特定的字节序列,用来描述文件的类型或格式,一般用16进制表示。
文件的魔术数字一般包含一些特殊的字符和数字组成的固定长度的字节串,不同类型的文件具有不同的魔术数字。例如,png 图像文件的魔术数字为 89 50 4e 47 0d 0a 1a 0a,而 jpg 图像文件的魔术数字为 ff d8 ff e0 00 10 4a 46 49 46 00 01。
php获取魔术数字实现方案:

到此这篇关于php文件上传安全:优化代码有效防范漏洞的文章就介绍到这了,更多相关php防止任意文件上传漏洞内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

  • PHP实现简单鉴权的示例代码

    PHP实现简单鉴权的示例代码

    一、要在php中的header中增加key、sign和timestamp,并实现鉴权可以按照以下步骤进行操作:生成timestamp:使用time()函数获取当... [阅读全文]
  • PHP提供下载功能实现案例

    PHP提供下载功能实现案例

    引言对web开发人员来说,“下载”功能是一个非常常见的需求。在网站中提供文件下载,通常用于提供用户手册、软件升级、音乐、视频等各种资源文... [阅读全文]
  • ThinkPHP防止SQL注入攻击的方法

    ThinkPHP防止SQL注入攻击的方法

    在thinkphp中,参数绑定是一种安全的方式,用于处理用户输入,特别是在构建数据库查询时。参数绑定可以防止sql注入攻击,因为绑定的参数会被自动转义,而不是直... [阅读全文]
  • PHP使用TCPDF处理pdf

    PHP使用TCPDF处理pdf

    一、什么是tcpdftcpdf是一个开源的php库,用于创建和处理pdf文件。它允许你在php应用程序中动态地生成pdf文档,可以用于生成报告、发票、合同等各种... [阅读全文]
  • thinkphp操作mongo数据的三种方法

    thinkphp操作mongo数据的三种方法

    总结一下当前thinkphp开发的项目中需要操作mongo:以下是三种tp中操作mongo数据的方法:使用tp中的扩展,方法一后面接着就可以任意使用db下的增删... [阅读全文]
  • PHP中常见文本文件操作总结

    PHP中常见文本文件操作总结

    一、常见的文本文件操作在php中,你可以使用一些内置的函数来进行文本文件操作。下面是一些常见的文本文件操作示例:1.打开文件:$filename = "exam... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com