(点)Liquid:是否可以分配视图模型属性或调用视图模型方法?

时间:2014-05-21 21:39:33

标签: liquid dotliquid

这是关于Liquid的安全性问题,使用DotLiquid库。

假设我的视图模型类似于以下(伪代码):

class MyViewModel
    public string MyField
    public string MyMethod()

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

  1. 可以分配MyField吗?即模板可以修改视图模型的内容吗?
  2. 可以调用MyMethod()吗?不,#My; MyMethod"成员配置为在呈现时可从模板访问。
  3. 如果" MyMethod"会发生什么?成员将配置为在呈现模板时可访问?是否可以从Liquid模板调用方法?
  4. 我的假设是答案对所有问题都不是,但我想确定。

    谢谢。

1 个答案:

答案 0 :(得分:4)

  1. 不,MyField无法分配。实际上,它根本无法访问 - 只有公共实例方法和属性可以在DotLiquid中访问。
  2. 这取决于你如何注册"这个带有DotLiquid的视图模型:
    • 如果视图模型继承自DotLiquid' Drop类,则可以访问所有公共实例方法和属性。
    • 如果它没有从Drop继承,那么您可能正在使用Template.RegisterSafeType(Type type, string[] allowedMembers)方法,这需要您告诉DotLiquid可以访问哪些属性和方法(使用allowedMembers参数)。
  3. 是的,可以进行方法调用,但DotLiquid只支持无参数方法。