具有剃须刀内容时将2sxc <script>移动到外部文件

问题描述

我正在尝试使我的CSP没有不安全的内联。 由于我必须手动检查每个应用程序中的每个文件,因此不妨将脚本移动到外部文件,而不是通过添加哈希值或名词在web.config中创建一个百万字的CSP条目。

对于客户端内容来说,这似乎很容易,但是许多模板中包含剃刀代码,例如:

<script>
    alert(@myVar);
</script>

如何将其移至外部?

解决方法

因此,通常,如果JS需要一些输入参数,则必须将它们放置在某个位置,只有剃刀才能知道它们是什么。

最简单的方法仍然是让初始调用使用变量-就像上面的示例一样。如果您出于安全方面的考虑,在剃刀中进行类型检查应该可以消除这种情况。

例如,如果您执行@((int)thing.property),则它根本无法注入任何意外的有效载荷。

如果出于某种原因您确实真的不想这么做,则可以使用attribute-json约定,例如

<div class="myGallery" init='{"files": 17}'> gallery contents </div>

并从您创建的js中进行选择。但这是很多工作,所以我建议使用更简单的方法。