1

这是一个关于 Liquid 安全性的问题,与 DotLiquid 库有关。

假设我的视图模型如下所示(伪代码):

class MyViewModel
    public string MyField
    public string MyMethod()

...并且 MyViewModel 对象被传递给 Liquid 模板,其中 MyField 设置为可从模板内访问(因此模板可以读取其内容)。

  1. 可以将 MyField 分配给吗?即模板可以修改视图模型的内容吗?
  2. 可以调用 MyMethod() 吗?在渲染模板时,没有将“MyMethod”成员配置为可从模板访问。
  3. 如果“MyMethod”成员在渲染模板时被配置为可访问会发生什么?是否可以从 Liquid 模板调用方法?

我的假设是所有问题的答案都是否定的,但我想确定一下。

谢谢你。

4

1 回答 1

5
  1. 不,MyField不能分配给。事实上,它根本无法访问——在 DotLiquid 中只能访问公共实例方法和属性。
  2. 这取决于您如何使用 DotLiquid“注册”此视图模型:
    • 如果视图模型继承自 DotLiquid 的Drop类,则所有公共实例方法和属性都可以访问。
    • 如果它不继承自Drop,那么您可能会使用该Template.RegisterSafeType(Type type, string[] allowedMembers)方法,这需要您告诉 DotLiquid 可以访问哪些属性和方法(使用allowedMembers参数)。
  3. 是的,方法调用是可能的,但 DotLiquid 仅支持无参数方法。
于 2014-05-27T07:40:12.023 回答