- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
今天,有人告诉我,我们应该始终将每个异常都包装在框架的顶层。原因是原始异常可能包含堆栈跟踪或消息中的敏感信息,尤其是堆栈跟踪。
不知道,有什么规则/原则/模式吗?
最佳答案
Today, someone told me that we should always wrap every exception at the top level of the framework.
“总是”似乎有点多。
与任何其他设计决策一样,您应该考虑成本和 yield 。
Because the original exception may contains sensitive information in the stacktrace or message, especially the stacktrace.
的确;异常可能包含敏感信息,并且堆栈跟踪可以被攻击者使用。
are there any rules/principles/patterns?
是的。在你做任何其他事情之前,特别是在你进行设计或代码更改之前,建立一个威胁模型。您问的是一个安全问题,因此您绝对必须了解威胁,然后才能设计出减轻漏洞的良好策略。
您的威胁模型回答的核心问题应该是“我的应用程序的信任边界是什么?数据何时以及如何跨越边界?什么这会暴露哪些漏洞?结果是攻击者可以利用哪些威胁?”
如果您不能准确理解什么是信任边界、漏洞、威胁和攻击者,那么在您尝试设计安全系统以减轻威胁漏洞之前,了解这些词的含义。 “编写安全代码 2”是一个不错的起点。 (我关于代码安全的书的第 5 章有一些关于消除异常漏洞的好建议,但它已经绝版了。也许有一天我会把它放在博客上。)
数据可以在任一方向跨越信任边界;不受信任的客户端可能正在向您的服务器发送格式错误的数据,而您的服务器可能正在向不受信任的客户端发送敏感的私有(private)数据。
您的问题具体涉及的威胁模型的特定方面是异常形式的数据。我没有骗你,在我们推出 .NET 1.0 之前,你实际上可以让框架给你一个异常,其文本类似于“你没有权限确定目录 C:\foo 的名称”。 (太好了。感谢您让我知道。我现在一定不会使用该信息来攻击用户。)
显然,在我们发货之前很久就已经修好了,但人们每天都在做道德上等同的事情。如果您有跨越信任边界的数据,您应该假设不受信任端的恶意用户将尝试在受信任端引发异常,并尝试从这些异常中尽可能多地了解系统。 不要让攻击者的工作更轻松。
您询问是否应包装所有异常。或许。如果您确实遇到了问题——如果包含敏感数据的异常可以跨越信任边界,那么包装异常可能是正确的做法。但也许这还不够。也许您根本不需要跨边界抛出异常,即使异常可以被清除。也许正确的做法是继续保持完全红色警报并说“嘿,我们收到了一个意外异常,该异常是由来自潜在敌对第三方的错误数据引起的,所以让我们(1)禁止他们的 IP,或(2)将他们重定向到蜜 jar 服务器,或 (3) 提醒安全部门,或 (4) 其他。”什么是正确的解决方案取决于您尚未说明的威胁。
正如我所说,您需要做的第一件事就是对威胁建模。不要在没有彻底了解威胁的情况下做出安全决策。
关于c# - 是否有必要在顶层包装每个异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9357807/
我正在使用 this solution在二进制矩阵中找到与图像边界对齐的矩形。假设现在我想找到一个不与图像边框对齐的矩形,并且我不知道它的方向;找到它的最快方法是什么? 为了示例,让我们寻找一个仅包含
else: 行在这个 Python 程序中是否正确/必要? from random import randrange for n in range(10): r = randrange(0,1
在 TDPL 7.1.5.1 中讨论了将 Widget w2 分配给 w1 并且作者指出“将 w2 逐个字段分配给 w1 会将 w2.array 分配给 w1.array——一个简单的数组边界分配,而
我是一名优秀的程序员,十分优秀!