工作簿保护无论密码如何都已解除(VBA Excel 2010)

3

我用各种关键词搜索了有关该问题的信息,但所有结果都与如何保护工作簿或在不知道密码的情况下取消保护有关。

我的当前问题并不是一个大问题,但感觉很奇怪,我想知道其他人是否也遇到过这个问题。

我目前正在制作Excel 2010 VBA宏来自动化数据处理。我正在添加工作簿保护,以便用户无法移动工作表的位置。我通过VBA“thisworkbook.protect”或传统的Excel菜单完成此操作。

当我运行以下代码时,无论密码、结构/窗口设置如何,工作簿保护都完全消失。

Sub test()
        ThisWorkbook.Worksheets(1).Cells(1, 1).Value(11) = ThisWorkbook.Worksheets(3).Cells(1, 1).Value(11)
End Sub

只需在代码末尾添加“thisworkbook.protect”,就可以重新锁定工作簿并解决问题,这就是为什么这不是一个大问题的原因。但是这种现象对我来说完全无法理解。
我感谢任何给予反馈的人。谢谢。
编辑1 我认为这不是worksheet.protect的问题。无论工作表和单元格是否受保护,我的问题都会发生,我特别关注工作表的位置和名称,这些都属于workbook.protect命令。
编辑2: 因此,问题如下,并不涉及Workbook.Protect和Worksheet.Protect方法之间的区别: 1. 我打开了一个受保护的工作簿; 2. 运行提供的代码片段而不取消保护工作簿,因为它不会影响工作表的保护; 3. 先前的操作取消了工作簿的保护,尽管我的意图是保护工作簿。

1
好的,我可以确认这一点。它看起来像是一个bug,并且在最新的Excel 2019中也完全相同。我的意思是,应该向Microsoft报告,因为它完全破坏了工作簿保护。 - Pᴇʜ
1
据我所知,Workbook.Protect 方法可以保护工作簿免受用户交互的影响 - 包括来自 UI 的整个工作簿相关操作(例如添加/删除/移动工作表),但不包括来自代码的操作。为了保护工作表,您必须使用 Worksheet.Protect 方法,该方法对于由代码引发的更改也能正常工作。 - Vitaliy Prushak
这是我评论的源链接:在此 - Vitaliy Prushak
@Pᴇʜ 感谢确认。很高兴知道我不是唯一遇到这个问题的人。 - valefore
1
@valefore 抱歉,我误解了问题。我已删除我的回答,因为它不相关,并建议编辑原帖以使问题更清晰。 - Vitaliy Prushak
1
@valefore 我打算向微软报告这个漏洞。 - Pᴇʜ
1个回答

1

好的,Microsoft 的回答是:

如果我正确理解你的发现,这份报告是基于攻击者复制并访问了一个包含未加密的密码保护工作簿/工作表/字段的 Excel 文件。在这种情况下,这是一项预期功能。

我的报告立即被关闭,所以我没有机会坚持认为这是一个漏洞。

所以他们字面上说这是一个“功能”(预期功能),而不是漏洞。显然,他们认为工作簿保护不是安全功能,唯一安全的保护是使用密码对工作簿进行加密,您实际上需要在查看之前输入密码。

在我看来,这仍然是一个漏洞和非预期行为。但是微软显然不关心这一点,这是非常值得争议的,因为这个漏洞意味着工作簿保护是无用的,只能防止用户意外破坏某些内容。

因此,要么您找到一个解决方法,因为您知道在运行那种代码后可以重新保护它,要么您不使用该“功能”,避免出现漏洞。

但是,任何知道这个漏洞的人都可以使用它来删除任何工作簿的保护。我看不到任何防止移除的方法。而且,由于这个漏洞已经在Excel 2010以及最近的版本中运行,微软很有可能在不久的将来不会修复它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接