点击劫持是一种恶意技术,它诱骗用户点击与看到的内容不符的内容,从而在点击看似无害的对象(包括网页)时,可能会泄露机密信息或允许他人控制其计算机。

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

http://www.avinetworks.com/

https://avinetworks.com/docs/

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