在 Web 开发中,有可能通过编译器支持(类型安全)来避免反XSS 过程中的双重编码吗?
在 Web 开发中,有可能通过编译器支持(类型安全)来避免反XSS 过程中的双重编码吗?
是否有可能通过编译器支持来强制执行数据的清理 (XSS 编码)?
这个问题让我考虑到双重编码以及其他需要编码的时候。似乎对于 Linq 来说这很有效,但可能我在其他场景中也需要这个功能。
admin 更改状态以发布 2023年5月23日
是的,如果有一个表达能力强大和可扩展的类型系统,这确实是可能的。例如,Ur/Web是一种用Ur编程语言编写的Web应用程序框架,在其中类型系统保证了几个有趣的特性:\n\n- 不能有死链(在应用程序内部)\n- 不可能生成无效的HTML\n- 不可能发生XSS攻击\n- 不可能发生SQL注入\n- 表单字段始终有相应的服务器端处理器\n- AJAX调用始终有相应的服务器端处理器\n- 客户端表单字段、服务器端处理器和数据库表的类型匹配\n- …等等…\n\nUr和Ur/Web的作者Adam Chlipala在Emerging Languages Camp 2010上做了一个有关这方面的演讲。此外,在Haskell、OCaml和Scala中也有一些Web框架(尝试)实现了(某些)这些特性。它们的类型系统足够强大,可以保证至少一些这些特性(例如,在Haskell中有SQL的类型安全嵌入,或在OCaml中有一个HTML模板语言,不允许用户生成无效HTML)。