1. 程式人生 > 其它 >python模板注入_BUUCTF/護網杯 easy_tornado 模板注入

python模板注入_BUUCTF/護網杯 easy_tornado 模板注入

技術標籤:紅寶書javascript

【紅寶書p248寄生式組合繼承】

實現原理:定義一個prototype變數,儲存Object.create(父類.prototype)的結果,即prototype物件的原型是父類的原型。同時prototype新增constructor屬性指向子類。
之後再將prototype物件變成子類的原型。
1,將父類原型中的方法新增進子類原型中的原型,檢視結構

<script>
        function addPrototype(subType, superType) {
            let prototype = Object.create(superType.prototype); // prototype物件的原型是父類的原型
            prototype.constructor = subType; // 給prototype物件新增constructor屬性,指向子類
            subType.prototype = prototype; // 將prototype物件賦值給子類的原型
        }
        function SuperType(name) {
            // 父類
            this.name = name;
            this.colors = ["red", "blue", "green"];
        }
        SuperType.prototype.sayName = function () {
            // 要的就是父類原型
            console.log(this.name);
        };
        function SubType(name, age) {
        
        }
        addPrototype(SubType, SuperType);//利用函式修改子類的原型
        console.dir(SubType);
    </script>

在這裡插入圖片描述
2,子類中通過父類call子類,使子類擁有父類一樣的屬性

 <script>
        function addPrototype(subType, superType) {
            let prototype = Object.create(superType.prototype); // prototype物件的原型是父類的原型
            prototype.constructor = subType; // 給prototype物件新增constructor屬性,指向子類
            subType.prototype = prototype; // 將prototype物件賦值給子類的原型
        }
        function SuperType(name) {
            // 父類
            this.name = name;
            this.colors = ["red", "blue", "green"];
        }
        SuperType.prototype.sayName = function () {
            // 要的就是父類原型
            console.log(this.name);
        };
        function SubType(name) {
            SuperType.call(this, name);
        }
        addPrototype(SubType, SuperType);//利用函式修改子類的原型
        let sub = new SubType('ike')
        console.dir(SubType);
    </script>

在這裡插入圖片描述