クリックジャッキングとは、ユーザーをだまして、そのユーザーが認識しているものとは異なる何かをクリックさせることで、機密情報が漏れたり、一見無害なオブジェクト(Web ページを含む)をクリックしたら自分のコンピュータが他のユーザーから制御されるようになったりするという、悪意ある方法です。

NSX Advanced Load Balancer でのクリックジャッキング対策

NSX Advanced Load Balancer では、クリックジャッキング対策がデフォルトで有効化されています。クリックジャッキング対策は、必要に応じて無効化できます。たとえば、このオプションを有効化していると、iframe との Horizon 統合は機能しません。このオプションを無効化するには、Controller 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 内に埋め込まれ、事実上は当該サイトそのものでその子サイトを表示する、という場合です。これを防ぐことは、サーバでいくつかのヘッダーを通じてできる程度に簡単です。ただし、より堅牢な環境では、iframing を有効化することが必要となる可能性があります。とはいえ、常にというわけではありません。

この後の 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