最近,我一直在查看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/