点击劫持是一种恶意技术,它诱骗用户点击与看到的内容不符的内容,从而在点击看似无害的对象(包括网页)时,可能会泄露机密信息或允许他人控制其计算机。
NSX Advanced Load Balancer 中的点击劫持保护
在 NSX Advanced Load Balancer 中,默认启用点击劫持保护。如果需要,可以停用点击劫持保护。例如,在启用了该选项的情况下,Horizon 与 iframe 的集成无法正常工作。您可以登录到控制器 CLI 并输入如下所示的命令以停用该选项:
$> shell Login: admin Password: : > configure systemconfiguration : systemconfiguration> portal_configuration : systemconfiguration:portal_configuration> no enable_clickjacking_protection : systemconfiguration:portal_configuration> save : systemconfiguration> save : > exit $>
选择性禁用点击劫持保护
点击劫持具有多种形式。一个这样的示例是,一个网站恶意地将不知情的网站嵌入到 iframe 中,实际上是通过自己的网站显示子网站。可以通过一些标头在服务器上轻松防止这种情况。不过,在更强大的环境中,有时可能需要启用 iframe,但并非总是如此。
以下 DataScript 有选择地确定来源站点(由来源地址标头确定)是否允许将该站点嵌入到 iframe 中。允许的来源地址列表保留在单独的字符串组中,从而提供一个广泛的 REST API 可更新列表,而无需在每次更新时直接修改规则。
以下示例涉及创建一个字符串组,然后创建引用该字符串组的 DataScript:
字符串组:Allowed-Referer
https://avinetworks.github.com
https://support.avinetworks.com
DataScript
-- Add to the HTTP Response event var = avi.http.get_header("referer", avi.HTTP_REQUEST) if var then -- The following line strips off the path from the hostname name = string.match(var, "[https?://]*[^/]+" ) val, match = avi.stringgroup.equals("Allowed-Referer", name) end if match then -- The referring site is allowed to embed this site within an iframe avi.http.replace_header("X-Frame-Options", "ALLOW-FROM "..name) avi.http.replace_header("Content-Security-Policy", "frame-ancestors " .. name) else -- The site may not be iframed avi.http.replace_header("X-Frame-Options", "DENY") avi.http.replace_header("Content-Security-Policy", "frame-ancestors 'none'") end