保护文件上传

2023-12-05

几年前,我在学习期间为一家小公司编写了一个网站。我开始意识到我的安全技能并没有达到应有的水平,最近该网站遭到黑客攻击,并且使用用于图像上传的表单上传了恶意 php 代码。

此后我进入了 .NET 世界,虽然我知道如何保护 .NET 中的文件上传,但我真的不知道如何使用 PHP 来做到这一点。很抱歉,我无法提供任何源代码,因此我不希望任何人为我的代码发布任何直接修复。

我希望有人可以向我展示一种服务器端分析的好方法,以确保上传的 $FILES 数组内容实际上是图像或音频文件,或者至少不是 php 文件。


很高兴你问了。这是一个棘手的话题,很少有应用程序开发人员意识到安全风险。

我将为您提供应该采取的方法的摘要,并阅读一些内容以了解更多信息。请务必阅读附加阅读材料,因为我的总结不完整。

Summary:

  1. 将用户上传的内容托管在单独的域上。这是您可以采取的最重要、最可靠的防御措施。

  2. 上传时检查上传文件的 MIME 类型,以确保其位于安全 MIME 类型白名单中。生成一个新的随机文件名来保存它。对于某些文件类型(例如图像),请考虑重新编码(例如,转换为 PNG,或使用 ImageMagick 将其从文件类型转换为相同的文件类型),因为这可能会阻止某些攻击。

  3. 下载/检索文件时,请确保设置Content-Type:标头明确指向安全 MIME 类型。还设置了一个X-Content-Type-Options: nosniff标头。如果您不希望在浏览器中查看该文件,请发送Content-Disposition: attachmentheader 也使浏览器将其视为文件下载。

  4. 扫描上传的文件是否有病毒或恶意软件。

Reading:

  • 应采取哪些步骤来验证应用程序中用户上传的图像?

  • MIME 嗅探保护

  • 存储和重放用户提供的 mime 类型是否安全?

  • 仅在白名单 MIME 内容类型下提供任何用户上传的文件是否安全?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

保护文件上传 的相关文章

  • 我怎样才能让我的卷发在刮擦之前等待几秒钟?

    所以我试图从网站上抓取一些数据 有一些必须被删除的名字列表 发生的情况是 如果有 15 个名字需要被删除 其中只有 5 个名字被删除 当我检查原始站点时 他们也以类似的方式加载数据 第一次加载网站时 仅显示五个名字 重新加载时会显示 10
  • 这段 PHP 代码是否会导致其他人的 Apache 崩溃?

    preg match all a str repeat a 1000 matches 编辑 稍微更改正则表达式以使其更简单 同时仍然崩溃 我在 PHP 5 3 5 和 Apache 2 0 上运行它 它使服务器崩溃 如果我将 339 更改为
  • android php 连接错误? (添加java代码)

    我试图从 android 应用程序获取位置 纬度 经度 并使用 php 插入数据库 然后提取 10m 半径内的数据 问题是 当我使用智能手机测试代码时 本地测试正常 数据未正确插入 表 usergps 有 3 列 名称 纬度 经度 在我测试
  • PHP - 简单嵌套无序列表 (UL) 数组

    我在 stackoverflow 上看到了这个嵌套 UL 数组问题的一些变体 但我认为我的比其他问题更简单 我正在寻找一个简单的数组循环 它允许无限量的主题 父项 和无限量的项目 子项 例如 ul li Topic li ul li Ite
  • IE8安全警告

    在我正在处理的 https 网站上 我不断收到 您只想查看安全传送的网页内容吗 此网页包含不会使用安全 HTTPS 连接传送的内容 这可能会损害网站的安全性整个网页 我确保该网站有相关链接 表单操作也是相对的 所有图像 src 也是相对的
  • 我可以为我的记录器使用静态类吗?

    最近我被告知静态类 方法是邪恶的 以我的 Logger 类为例 class Logger private static logs array public static function add msg self logs msg publ
  • 为什么 Laravel 即使在本地环境也会重定向到 https?

    我正在开发 Laravel 5 5 版本 我有一个需要域才能执行的应用程序 这就是为什么 我在我的中添加了以下条目 etc hosts文件 以便我可以使用以下域打开我的应用程序仪表板 应用程序 dev or api application
  • 如何循环并访问多维且关联的数组中的各个元素? PHP,JSON 或 XML

    我正在通过 API zotero org 检索书目数据 它与底部的示例类似 只是更复杂 示例是键入的 我想检索一条或多条记录并在页面上显示某些值 例如 我想循环遍历每个顶级记录并以格式良好的引文打印数据 暂时忽略正确的围兜样式 假设我只想为
  • PHP:还记得我和安全吗?

    在我学习 PHP 如何支持 Unicode 的间隙 我一直在研究如何让我的 记住我 cookie 更加安全 然而 有一些事情我不明白 还有一些我自己的思考 我希望得到一些建议和意见 1 有没有什么方法可以采用不涉及cookie的 记住我 功
  • Woocommerce - 检查产品是否是在 60 天前创建的

    我想检查 Woocommerce 产品是否是在不到 60 天前创建的 如果属实 请做点什么 我正在使用官方 Woocmerce 功能获取在后端 管理中创建产品的日期 product gt get date created 我的代码部分有效
  • Magento 开源 2.3 - CSS 和 JS 未加载

    I installed Magento 2 3 successfully but when type http localhost Magento2 http localhost Magento2 I get a blank page li
  • Magento - 将媒体库属性添加到产品平板中

    如何将 media gallery 属性类型添加到产品平面表中 以便可以在产品列表中使用它 可以通过将 用于产品列表 定义为 是 来添加它们 完成此操作后 您将需要重新索引产品平面 编辑 请参阅解决方案以获取最终答案 Source 我可以向
  • 使用 Wikipedia API 查找文章的主要类别

    我有一个文章列表 我想找到每篇文章的主要类别 维基百科在这里列出了它的主要类别 http en wikipedia org wiki Portal Contents Categories http en wikipedia org wiki
  • Laravel 使用 Monolog\Handler\BrowserConsoleHandler 进行日志记录

    How can 拉拉维尔 5的日志记录更改为Monolog Handler BrowserConsoleHandler What doesn t在 Laravel 5 中工作但是does在独立的 PHP 文件中工作 use Illumina
  • 如何使用 DbSession 在 Yii2 中创建用户会话管理系统 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 今天 当我想为我的网站创建用户个人资料页面并希望创建系统用户可以管理他在此系统中的活动会话时 需要 查看活动会话 浏览器和平台 查看当
  • YouTube API 观看私人视频

    我有一个具有草稿模式的网站 有人可以登录并查看该网站的外观 以便在公众看到该网站之前批准该网站 我在一个帐户上有一些 YouTube 视频 但我将其设为私人帐户 因为我不想让全世界看到它们 不过 我确实希望登录草稿模式的人能够观看私人嵌入内
  • 在 MySQL 数据库中存储大文件的更好方法?

    我有一个 PHP 脚本 您可以使用它上传非常大的文件 最大 500MB 并且该文件的内容存储在 MySQL 数据库中 目前我做这样的事情 mysql query INSERT INTO table VALUES uploadedfile f
  • PHP 会话混乱

    好吧 我已经很困惑了 我有一个存储在会话中的对象 我可以向该对象添加项目 到目前为止非常简单 我像这样初始化对象 template new Template mysqli SESSION template serialize templat
  • 重定向至 2 页

    我有一个 PHP 页面 我想先将其重定向到一个页面 例如 google com 然后再重定向到另一个页面 例如 bing com 为此 我使用以下方法 header Location http google com header Locat
  • 发帖到 FB 粉丝专页时如何解决“不支持的发帖请求”?

    我有一个可以执行 ff 的脚本 发布指向用户时间线 墙的链接 以管理员身份发布指向用户页面的链接 发布到用户的个人资料页面工作正常 然而 发布到粉丝页面的行为很奇怪 我我能够发帖但我回来了 不支持的发布请求 错误 我已经搜索过这个问题并尝试

随机推荐

  • Netty UDP 服务器引导程序

    我发现 Netty 4 0 的所有 TCP 服务器实现都使用 ServerBootstrap 实例 服务器和客户端之间最大也是唯一的区别 Netty的不同之处在于Bootstrap和Channel的实现是不同的 用过的 请看一下下面的代码
  • 我需要清理 Java 中的 Thread 对象吗?

    在我的 Java 应用程序中 我有一个 Runnable 例如 this runner new Runnable Override public void run do something that takes roughly 5 seco
  • SQL查询更新表中的前1条记录

    谁能告诉我如何编写查询来更新表中的前 1 条记录 Thanks 您必须通过根据您决定的列进行排序来决定表中的顶部记录是什么 也就是说 您可以在 SQL Server 中执行此操作 UPDATE YourTable SET YourColum
  • Android 中退出应用程序

    我想退出 Android 中的应用程序 只需放置一个 退出 按钮 就会终止我的应用程序 我知道我不应该这样做 我知道这不是操作系统的哲学 如果您知道如何做到这一点 请分享 在应用程序中 我有许多打开的活动 因此 finish 无法完成这项工
  • 从经纬度获取国家/地区

    我想知道如何使用 JavaScript 从纬度和经度获取国家 地区名称 我愿意使用 Google 地图的 JavaScript API 我还可以获得城市和邮政编码吗 Edit 我的目标是自动填写地址字段 而不是将其显示在地图上 我不知道它是
  • WinSCP - 如何识别文件是否传输成功

    我正在使用 WinSCP 通过 SFTP 自动上传文件 我已经打开了级别1的调试日志 是否可以查看文件是否上传成功 谢谢 日志文件的一部分 2012 08 30 15 30 06 539 File C files file 20120830
  • 监视对新主题的请求暂停向现有主题推送通知

    我在我的 Google Cloud Pub Sub 帐户中配置了两个主题 每个主题在单个项目下都有一个订阅 当我在收件箱上调用 watch 并将主题 1 传递给监视请求时 我会收到发送到所需端点的推送通知 当我在收件箱上调用 watch 时
  • JSF 状态最初保存到服务器并在会话超时时传输到客户端?

    是否有任何状态保存方法允许 JSF 应用程序最初在服务器上保存状态数据 但在会话过期时间间隔之后 该状态会传输到客户端 以便应用程序始终响应 即使在服务器上的会话超时之后并且内存更好在服务器上管理 或者有什么方法可以实现这一点 但我希望这应
  • 如何使用 Guava ListenableFuture 和 Futures.chain() 方法

    我有一个作业要求我学习如何使用 Guava 并发库 在任务中 我有几个线程池 其中每个线程池都由一个单独的对象控制 每个池都有几个执行简单任务的工作线程 主要是通过使用来模拟做事 Thread sleep long 并且所有这些简单的任务都
  • 使用 REST 优化 Neo4j 中的大批量批量插入

    我需要通过 REST API 的 Batch 端点将大量节点及其之间的关系插入到 Neo4j 中 大约 5k 记录 秒 仍在增加 这将是 24x7 连续插入 每条记录可能只需要创建一个节点 但其他记录可能需要创建两个节点和一个关系 我可以通
  • 长轮询服务器原理(客户端认证)

    假设我有一个长轮询服务器 它应该正常工作 当新客户端连接到网站时 他只是以匿名方式连接 无需身份验证 会发出新的 GUID 并将其存储在签名的 cookie 中 该 cookie 在轮询期间标识此连接客户端和服务器 现在客户端想要登录并以经
  • 在一般情况下,Python 的 super() 实际上是如何工作的?

    上面有很多很棒的资源super 包括this这篇很棒的博文经常出现 并且 Stack Overflow 上也出现了很多问题 然而 我觉得他们都没有解释它在最一般情况下 使用任意继承图 如何工作 以及幕后发生的事情 考虑一下钻石继承的基本示例
  • 如果返回类型可能是 Error 或 Success 对象,如何反序列化 XML

    我正在使用一个基于 XML 的 API 它的根节点可以返回一个SuccessResponse or a ErrorResponse 我正在使用下面的内容来反序列化数据 但我不确定如何处理返回不是 a 的情况SuccessResponse 处
  • 实体框架、PostgreSQL、带有隐藏 xmin 列的乐观并发

    我正在针对 PostgreSQL 9 1 数据库使用实体框架 模型优先方法 您可能都知道每个表都有一个隐藏列 称为xmin我将用它来帮助 EF 在执行更新之前确定该行是否已更改 我知道 PostgreSQL 的内部结构可能会发生变化 这对于
  • 从 dll 导出带有 clr 参数的函数?

    我有一个遗留的托管 c dll 我需要调用一些返回托管类型的函数 对于没有托管类型的 dllexports 这很简单 我只需在标头中定义静态 c 函数 如下所示 extern C declspec dllexport int cdecl I
  • 将 Hibernate 3 迁移到 5:关系 hibernate_sequence 不存在

    我正在将使用 Hibernate 3 运行的应用程序迁移到 Hibernate 5 我有一个奇怪的错误 错误 关系 hibernate sequence 不存在 我们正在使用 hbm xml映射文件 一切工作正常 直到我更改了 Hibern
  • Django 单元测试响应上下文为 None

    为什么在下面的测试中response context None 我检查了response content 它是 如果我删除 assertIsNotNone 行 我会收到 TypeError NoneType object is not su
  • Java中动态绑定是如何实现的?

    我知道在C 中 每个实例中都有一个指向虚拟表的虚拟指针 但是Java中动态绑定是如何实现的呢 我想我会回答我自己的问题 基本上 对象存储对其类对象的引用 动态绑定将从对象转发到该类对象
  • 部署在 IIS 6 上的 MVC3 RC 应用程序出现“403 禁止”错误

    我已经将一个非常简单的 MVC3 RC 应用程序部署到 IIS 6 Windows 2003 服务器 我在尝试访问根目录时收到 403 禁止 错误 目前该应用程序只有一页 因此没有其他可供尝试 我注意到根目录中不再有 default asp
  • 保护文件上传

    几年前 我在学习期间为一家小公司编写了一个网站 我开始意识到我的安全技能并没有达到应有的水平 最近该网站遭到黑客攻击 并且使用用于图像上传的表单上传了恶意 php 代码 此后我进入了 NET 世界 虽然我知道如何保护 NET 中的文件上传