Flask-jinja

SSTI 中常用的魔术方法

__class__:用来查看变量所属的类,根据前面的变量形式可以得到其所属的类。 `__class__` 是类的一个内置属性,表示类的类型,返回 `<type 'type'>` ; 也是类的实例的属性,表示实例对象的类。

 ''.__class__
<type 'str'>   字符串
 ().__class__
<type 'tuple'> 元组
 [].__class__
<type 'list'>  列表
 {}.__class__
<type 'dict'>  字典

 

__bases__:用来查看类的基类,也可以使用数组索引来查看特定位置的值。 通过该属性可以查看该类的所有直接父类,该属性返回所有直接父类组成的元组(虽然只有一个元素)。注意是直接父类!!!

 ().__class__.__bases__
(<type 'object'>,)
 ''.__class__.__bases__
(<type 'basestring'>,)
 [].__class__.__bases__
(<type 'object'>,)
 {}.__class__.__bases__
(<type 'object'>,)
 ''.__class__.__bases__[0].__bases__[0]   // python2下雨python3下不同
<type 'object'>

 [].__class__.__bases__[0]
<type 'object'>

 

除此之外,我们还可以利用 __base__ 方法获取直接基类:

"".__class__.__base__
<type 'basestring'>

 

有这些类继承的方法,我们就可以从任何一个变量,回溯到最顶层基类(`<class'object'>`)中去,再获得到此基类所有实现的类,就可以获得到很多的类和方法了

__subclasses__():查看当前类的子类组成的列表,即返回基类object的子类。

 

__init__:初始化对象时触发。

 

__globals__:该方法会以字典的形式返回当前位置的所有全局变量,与 func_globals 等价。该属性是函数特有的属性,记录当前文件全局变量的值,如果某个文件调用了os、sys等库,但我们只能访问该文件某个函数或者某个对象,那么我们就可以利用globals属性访问全局的变量。该属性保存的是函数全局变量的字典引用。

 

posted @ 2022-07-29 04:35  L0VEhzzz  阅读(25)  评论(0编辑  收藏  举报