很多项目会把转义操作放在后端接口获取参数的地方,从而忽略了这样一个问题——为什么主流框架都不在获取参数的方法里实现这一点?

以Laravel为例,如果可以这样获取转义后的参数:$request->escape('content'),代码会显得更优雅,而实际上只能用自己封装的函数手工转义:my_escape($request->get('content')),很丑陋的代码。

事实上,主流框架并非没有提供防御XSS的封装,只是都放在模板引擎里。这样做的依据是,XSS的原理是在原本用于展示的数据里包含了可执行的文本,但不是所有展示的位置都不应该包含可执行的文本。从另一角度上说,后端应该校验前端传递的数据,但不应该篡改它。