最近,我一直在查看Pagedown.js,以获取在页面上使用mark-down而不是丑陋的只读textareas的魅力。

我非常谨慎,因为欺骗已转换的转换器似乎很容易。我已经看到了一些有关Angular.js及其html绑定(bind)的讨论,并且在Knockout.js 3.0出现时听到了一些有关html绑定(bind)以前不安全的信息。

似乎有人需要做的所有事情来禁用Pagedown.js中的 sanitizer ,例如-

var safeConverter = new Markdown.Converter();
// safeConverter is open to script injection

safeConverter = Markdown.getSanitizingConverter();
// safeConverter is now safe

// Override the getSanitizingConverter pseudo-code
Markdown.getSanitizingConverter = function () {
    return Markdown.Converter;
};

他们可以打开一个站点进行脚本注入(inject)。那不是真的吗

编辑

那么,为什么这样的库会打包一个 sanitizer 程序以使用客户端呢?当然,他们说不要渲染未经 sanitizer 的html,但下一行说要使用Markdown.Sanitizer。

Angular如何不使用 sanitizer 服务,或者这仅仅是一场闹剧?

最佳答案

我相信对这种“ sanitizer ”的目的和性质有些误解。

清理程序(例如Angular的ngSanitize)的目的是而不是,以防止“不良”数据发送到服务器端。相反,它是另一种方式:可以使用 sanitizer 程序保护非恶意用户免受恶意数据的侵害(是由于服务器端的安全漏洞(是的,没有任何设置是完美的)或从其他方面获取的)来源(您无法控制的来源)。

当然,作为客户端功能,可以绕过 sanitizer ,但是(因为有 sanitizer 可以保护用户(而不是服务器)),绕过它只会使绕过器不 protected (您不能对此做任何事情) ,您也不应该在乎-这是他们的选择)。

此外,清理程序还可以扮演另一个(可能更重要的) Angular 色:清理程序是一种工具,可以帮助开发人员更好地组织其代码,从而使其更易于测试某些类型的漏洞(例如XSS攻击),甚至帮助进行此类安全漏洞的实际代码审核。

在我看来, Angular docs 很好地概括了这个概念:



注1:重点是我的。
注2:很抱歉为您提供冗长的报价,但是我认为这是一件非常棘手的事情(尽管很敏感),但也经常被人们误解。

关于javascript - 客户端HTML清理的安全性如何?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23839173/

10-09 19:26