16

在阅读JavaScript 中的navigator()对象时,我遇到了taintEnabled()taint()函数描述,与类似的函数一样好untaint(),指的是所谓的“数据污染”。

谷歌搜索 net 和 StackOverflow 显示了对 Perl 语言的一些可能参考,但没有关于 JavaScript。我想知道,什么是数据处理以及如何使用这些功能?

4

3 回答 3

14

数据污染(或污染检查)是一种语言功能,其中用户输入的数据被标记为被污染,该标记传播到从该输入派生的所有数据。因此,代码可以实现运行时断言,以确保不会使用受污染的数据调用安全关键代码(即防止 SQLi、XSS 类型的攻击)。

虽然 Netscape 在 v3 和 v4 的浏览器中实现了它,但遗憾的是,它的支持从未在其他地方实现,所以 @trejder 绝对正确,应该在 JavaScript 中避免它。

于 2014-04-11T01:19:16.843 回答
1

如前所述,互联网上关于数据污染的资源并不多,因为它似乎是一个早已被遗忘、弃用的技术和话题。但我在findmeat.org上发现了一篇有趣的文章。对于Navigator.taintEnabled()它所说的方法(引用的各个部分,一些文本缩短了):

数据污染支持是一种将数据发送回服务器的短暂手段。安全隐患变得不可行,整个数据污染的想法被弃用了。JavaScript 版本 1.2 中删除了该功能。仅支持此方法以防止脚本崩溃。此功能已被高度弃用,您可以预期它将来会导致运行时异常。您应该尝试将其删除以防止将来出现运行时错误。

似乎现在很少有浏览器支持这个功能(和类似的,提到的),并且在任何情况下都不应该使用它。即使浏览器完全实现了这一点,它也应该始终为此方法返回值 false。

于 2012-07-17T10:34:53.417 回答
1

缺乏关于这个概念的信息会使新学习者付出更多的努力。这是我帮助他们的发现。

何时应启用污染,何时不启用,以下是值得考虑的两个要点:

  1. 启用数据污染后,一个窗口中的 JavaScript 可以看到另一个窗口的属性,无论另一个窗口的文档是从哪个服务器加载的。但是,其他窗口的作者污染(标记)属性值或其他应该安全或私有的数据,并且 JavaScript 不能在未经用户许可的情况下将这些污染值传递给任何服务器。
  2. 禁用数据污染时,脚本无法访问另一台服务器上窗口的任何属性。

一个有用的资源是http://www.aisystech.com/resources/advtopic.htm#1009533

于 2017-01-15T04:20:28.183 回答