“转义”是指在标记语言、编程语言或脚本语言中,将具有特殊含义的字符或符号转换为可以安全处理的替代字符串的过程。
例如,在 HTML 中,字符 < 和 > 保留用于描述标签。 如果这些字符直接出现在 HTML 中,Web 浏览器会将它们解释为标记而不是纯文本。 因此,要将这些符号显示为纯文本,必须将它们写为转义序列,例如 < 表示 <,> 表示 >。 当浏览器遇到这些转义序列时,它会在视觉上将它们呈现为原始字符(< 和 >)。 这个转换过程就是我们所说的“转义”。
在Web 安全中,转义尤为重要。 这是“清理”的一个重要方面,“清理”是一种旨在安全处理通过网络表单提供的用户输入的做法。
例如,想象一个 Web应用从表单获取用户输入并将其直接显示在后续页面上。 假设用户提交输入:
<script>alert("你好!");</script>
如果 Web应用直接将此字符串包含到结果页面中而不进行转义,则浏览器会将其解释并执行为 JavaScript 代码。 因此,会弹出一个显示“你好!”的警告框,这并不是网站创建者或管理员想要的效果。 虽然这个简单的脚本可能不会造成重大危害,但第三方用户任意将脚本嵌入网页的能力是一个严重的问题,可能会使网站面临跨站点脚本 (XSS) 攻击和其他安全威胁。
为了防止这种情况,Web应用应该在呈现此类数据之前正确转义特殊字符。 通过将 < 和 > 替换为相应的转义序列(< 和 >),恶意脚本将无害地呈现为字符串:
<script>alert("你好!");</script>
在这种形式下,浏览器严格将其视为文本,从而中和任何脚本并按预期显示它们,而不会触发意外行为。
大多数现代 Web应用开发语言和框架都具有用于适当转义字符串的内置函数。 然而,在复杂的 Web应用中验证每个输入是否正确转义,以及识别和纠正有问题的元素,可能需要花费大量的时间和精力。 解决此问题的一个非常有效的方法是使用 Web应用防火墙 (WAF),它可以确保用户提交的输入在到达 Web应用之前被转义。
F5 通过F5 BIG-IP解决方案提供 WAF 功能。