很多項目會把轉義操作放在後端接口獲取參數的地方,從而忽略了這樣一個問題——為什麼主流框架都不在獲取參數的方法里實現這一點?

以Laravel為例,如果可以這樣獲取轉義後的參數:$request->escape('content'),代碼會顯得更優雅,而實際上只能用自己封裝的函數手工轉義:my_escape($request->get('content')),很醜陋的代碼。

事實上,主流框架並非沒有提供防禦XSS的封裝,只是都放在模板引擎里。這樣做的依據是,XSS的原理是在原本用於展示的數據里包含了可執行的文本,但不是所有展示的位置都不應該包含可執行的文本。從另一角度上說,後端應該校驗前端傳遞的數據,但不應該篡改它。