这是场景。目前,我们将 Razor 模板存储在磁盘上,用于多租户 CMS 系统。我们需要多租户系统中的管理员能够上传他们自己的网站模板(布局),但在这样做时,我们需要确保它们不会包含任何可能有害的 Razor 标记。
实际上,我们希望能够对可能包含在客户端模板中的任何 Razor 语法进行编码。
提议:允许管理员使用安全的模板系统(如dotliquid
)上传带有批准标签的模板。
上传时,首先将所有“@”符号替换为“@@”,以避开任何潜在的 Razor 语法。接下来,用适当的 Razor 标记替换已批准的标签,并将模板保存在数据库中。
加载页面将使用自定义VirtualPathProvider - 超出此问题的范围......
问题
- 如果我简单地将所有“@”符号替换为“@@”,是否会有效地“编码”模板中可能存在的所有剃刀标记?
- 如果模板包含合法的“@”符号,例如在电子邮件地址或 Twitter 句柄中,是否有任何顾虑?我最初的测试表明双重转义有效。
更新
我的测试表明,用另一个“@”符号转义所有“@”符号将通过转义任何 Razor 语法来清理模板。但我很想听听可能对该主题有更深入了解的人的来信。