【问题标题】:Would that mean angular2 doesn't suggest rendering in server side这是否意味着 angular2 不建议在服务器端进行渲染
【发布时间】:2016-12-26 08:01:06
【问题描述】:
我知道 angular2 可以在服务器端渲染(即使我不知道有什么好处),我确实看到了 angular2 服务器端的示例。
Angular 2 Universal Starter
但是好像angular2官方没有这个建议。
服务器端 XSS 防护 from angular2 doc
在服务器上构建的 HTML 容易受到注入攻击。将模板代码注入 Angular 应用程序与将可执行代码注入应用程序是一样的;它使攻击者可以完全控制应用程序。为了防止这种情况,请确保使用自动转义值的模板语言,以防止服务器上的 XSS 漏洞。不要使用模板语言在服务器端生成 Angular 模板,这会带来引入模板注入漏洞的高风险。
如何理解?
【问题讨论】:
标签:
javascript
angularjs
angular
【解决方案1】:
XSS 可能是由添加到 DOM 的用户提供的数据引起的。
这不是服务器端渲染的意义所在。服务端渲染就是在服务端执行你的 Angular2 应用,缓存结果并将生成的 DOM 发送给客户端,这样客户端要做的初始化工作就更少,可以在更短的时间内完成初始渲染。
如果您的 Angular2 应用程序代码正在执行此操作,此可能会导致将用户提供的数据添加到 DOM。
Angular2 在服务器上渲染时也会清理添加的 HTML 以防止 XSS。如果您通过使用DomSanitizationService 将字符串标记为安全来防止这种情况发生,那么您将再次容易受到 XSS 攻击。
【解决方案2】:
不要在服务器端使用模板语言生成 Angular 模板,这会带来引入模板注入漏洞的高风险。
依靠 Angular 2 清理 HTML 以防止 XSS 是不够的。攻击者可以将 Angular 表达式(例如 {{1==1}})注入服务器端模板。 {{1==1}} 可能是一个无害的示例,但请查看this exmaple,您可以在其中获取用户的身份验证令牌。这就是为什么在服务器上生成 Angular 模板是危险的。你必须确保对手不能注入恶意的 Angular 表达式。