不需要括號的 Python
前言 看到 huli 大大發的「不需要括號跟分號的 XSS」有感而發,於是我試著寫一個 Python 版本。 不過 Python 可沒有 tagged templates 語法糖給你用,所以我們要想其他方式呼叫函式。 考慮以下程式碼: def safe_eval(expr): if '(' in expr or ')' in expr: raise TypeError("safe_eval does not allow ().") return eval(expr) print(safe_eval(input())) 你會想要怎麼去搞爆他,例如我們要去讀取機密檔案,或者是執行任意指令。 eval 可能太難了,我們先從 “safe_exec“ 開始,也就是: def safe_exec(expr): if '(' in expr or ')' in expr: raise TypeError("safe_eval does not allow ().") return exec(expr) safe_exec(input()) safe_exec(先從 statement 開始) exec 可以執行整段程式碼(statements),所以比較容易透過裝飾器等語法達成。 在 Python 裡面支援裝飾器(decorator),讓你能夠在不修改原函式的情況下,在其之上添加新功能,例如: def my_decorator(func): def wrapper(): print(">> start func") func() print(">> end func") return wrapper @my_decorator def foo(): print("meowmeow!...