Common Threats
因为 webforJ 应用程序在服务器上运行 Java,而浏览器只呈现界面(请参阅 Client/Server Interaction 文章),因此几类攻击在设计上被遏制。其他的仍然取决于您编写代码的方式。本页将逐步介绍最重要的威胁,并明确界定 webforJ 处理的内容与您需要处理的内容之间的界限。
跨站脚本(XSS)
当一个本应作为文本显示的字符串被浏览器解释为实时标记时,跨站脚本(XSS)攻击就会成功。webforJ 默认关闭这种情况:当您设置组件的文本时,其值被逐字显示,因此其中的标签作为字符出现,永远不会执行。
// 作为字面字符 "<b>hi</b>" 显示
component.setText("<b>hi</b>");
渲染真实的标记是一个单独的、故意的步骤。webforJ 仅在值被 <html>...</html> 包裹时将其视为标记,这正是 HasHtml 关注点的 setHtml 方法在您背后所做的工作。以任何其他方式设置的值都会首先被简化为纯文本。
// 故意渲染为标记
component.setHtml("<b>hi</b>");
您选择的标记不会被自动清理
框架不会清理您包裹在 <html> 中的标记。只要该标记的任何片段来源于个人、存储记录、查询字符串或您无法完全控制的任何其他来源,您都需要在它到达组件之前自己清理。使用维护好的清理器,如 jsoup 或 OWASP Java HTML Sanitizer,并给予它您实际打算允许的标签的允许列表。