- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 .NET 4.5 中,可以选择使用随机字符串哈希代码生成。
这意味着,在不同的应用程序域中计算出的相同字符串的哈希码将是不同的。 (见 http://msdn.microsoft.com/en-us/library/jj152924.aspx)
问题是:这个选项的实际用途是什么?
换句话说,我需要在什么场景(场景)下开启它?
最佳答案
我相信这个的一般应用是为了防止针对散列机制的可能的 DoS 攻击。
自 GetHashCode()
由 Dictionary<,>
之类的东西在内部使用,对于“正常”数据,散列值应该合理分布,以便散列冲突不会“太频繁”发生。当哈希冲突确实发生时,Dictionary<,>
回退到具有相同哈希码的所有项目的线性搜索。
在可公开访问的应用程序中,了解散列机制的攻击者可能会提交具有大量具有相同散列代码的字符串的请求,导致通常的 O(1) 查找变成 O(N) 查找任何添加了这些值的字典。
特别是对于 web 应用程序,我相信像标题和查询字符串参数这样的东西被添加到字典中以便应用程序快速访问,因此对手可以提交包含数千个参数和哈希冲突的请求,导致请求明显更多比“正常”请求更需要资源。这对任何 DoS 尝试都有放大作用,即使攻击者只有相对适中的可用带宽,也允许攻击发生。
通过随机化每个 AppDomain 的哈希值,攻击者不太可能制作具有冲突哈希的字符串,从而防止此类攻击。
编辑地址评论:
虽然 MSDN 文章没有提到它,但设置的目的不是提供一种让不同 AppDomain 创建不同字符串哈希的方法,而是一种安全功能,可防止第三方创建许多具有相同哈希值的字符串。
在 .NET 4.5 之前(或禁用此设置),前提是我运行的 .NET 版本与您相同,"some string".GetHashCode()
在我的机器上将提供与您相同的值。由于使用的散列机制很简单(当然不是加密安全的散列),逆向工程并创建大量具有相同散列的字符串相对容易,然后如上所述使用这些来放大 DoS 攻击。
启用此设置后,随机性元素会添加到字符串的哈希代码生成中,从而使攻击者更难以可靠地制作碰撞字符串。
它是每个 AppDomain 的事实是哈希码具有某些必需属性这一事实的副产品,例如两个相同的字符串具有相同的哈希码。因此,AppDomain 为设置的效果提供了合理的边界,因为启用此设置后,大多数应用程序都可以完美运行。
此新设置可能会进一步解决此漏洞披露中提出的问题:CVE-2011-3414与利用 ASP.NET 应用程序中的散列冲突有关(我相信,该问题在其他 .NET 版本中已“修复”,通过限制可以在请求中提供的 key 数量,防止攻击者创建如此多的冲突,从而降低性能显着退化)。 referenced paper特别提到缺乏随机字符串散列是导致该问题广泛存在的一个因素。
关于.net - 在每个应用程序域的基础上实际使用字符串哈希码计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13122070/
我一直在从事一个开源项目。它使用安装在 jdk8 镜像上的构建生成的 debian (.deb) 软件包创建 docker 镜像。 但最近我开始犯错误,不幸的是我无法克服它。一旦通过 Dockerfi
我正在尝试使这些卡片可点击以重定向到另一个屏幕,但我无法弄清楚 let cards = this.state.items.map(item => ( Actions.dog
我是一名优秀的程序员,十分优秀!