安全的Web应用代码生成技术
1. 语言预处理器与ELET
在处理嵌入式代码时,实现语言预处理器将其转换为API调用大部分过程较为顺利。主要挑战在于处理语法上下文从HTML切换到JavaScript,或反之的情况。预处理器包含两个独立的解析单元,分别用于处理HTML和JavaScript。当遇到表示适用语言变化的HTML元素时,会选择相应的解析器,这些元素包括脚本标签的开闭,或携带JavaScript代码的HTML属性,如 onclick 等事件处理程序。
为了尽可能模拟字符串类型的特性,引入了简单的预处理器元语法,允许程序员将宿主值(如Java字符串)添加到嵌入式语法中,并组合/扩展ELET实例。还实现了迭代器API,可用于搜索ELET的数据字面量或拆分ELET实例。
示例代码如下:
HTMLElet h = "Hello <b> $data(name)</b>, nice to see you!";
2. 为J2EE添加HTML创建外部接口
为了组装最终的HTML输出,外部接口会遍历ELET的元素并将它们传递到输出缓冲区。为了确定性地避免XSS漏洞,所有遇到的数据字面量会根据其在HTML页面中的语法上下文进行不同方式的编码:
- HTML :使用HTML编码(“&…;”)对数据字面量中的元字符(如<、>、=、”或’)进行编码,防止注入恶意HTML标签或属性。
- JavaScript代码 <
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



