クリックジャッキングとは、ユーザーをだまして、そのユーザーが認識しているものとは異なる何かをクリックさせることで、機密情報が漏れたり、一見無害なオブジェクト(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
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