DDCT的一道flask题?
刚开始还傻乎乎的觉得是不是传入 func:show_flag;
就会被执行
我们从入口点开始看起, 看看从我们传入URL的参数开始, 是怎么到这个函数的
这里加入了一个判断, 也就是说querystring
必须是非空, 长度小于等于100, 且必须以action:
开头的
所以如果是直接构造 func:show_flag
是不可能地
之后调用了 trigger_event
这个函数
这个函数会将querystring
添加到 event_queue
中
这里对querystring
进行了类型判断, 从URL中传入的都是str类型, 而代码内部的调用传入的都是 list类型(其实也不能这么说,。。
比如这几处地方
如果要执行eval函数
- 必须在
request.event_queue
中, 也就是在这之前必须调用trigger_event
函数 -
event
必须以action
或者func
开头 - 必须是合法的字符
所以要如何达到任意函数执行的目的呢?
先想办法调用trigger_event
函数再说
查了一下网上关于eval的例子。
大部分都是通过eval对用户的输入过滤不严导致的
# 注释符要怎么用呢。
还是不太明白如何调用的。