问题描述
我正在尝试使我的CSP没有不安全的内联。 由于我必须手动检查每个应用程序中的每个文件,因此不妨将脚本移动到外部文件,而不是通过添加哈希值或名词在web.config中创建一个百万字的CSP条目。
对于客户端内容来说,这似乎很容易,但是许多模板中包含剃刀代码,例如:
<script>
alert(@myVar);
</script>
如何将其移至外部?
解决方法
因此,通常,如果JS需要一些输入参数,则必须将它们放置在某个位置,只有剃刀才能知道它们是什么。
最简单的方法仍然是让初始调用使用变量-就像上面的示例一样。如果您出于安全方面的考虑,在剃刀中进行类型检查应该可以消除这种情况。
例如,如果您执行@((int)thing.property)
,则它根本无法注入任何意外的有效载荷。
如果出于某种原因您确实真的不想这么做,则可以使用attribute-json约定,例如
<div class="myGallery" init='{"files": 17}'> gallery contents </div>
并从您创建的js中进行选择。但这是很多工作,所以我建议使用更简单的方法。