クリックジャッキングの原因
他ドメインのサイトが、iframeであなたのサイトを読み込めてしまうのが原因
「iframeで読み込み可能なページに、更新系の処理が実装されていること」が根本原因
iframeで他のサイトを埋め込むこと自体は別に悪いことではなく、例えばWebページ上でYouTube動画を再生できるような仕組みはiframeで構成されています。
クリックジャッキング対策
X-Frame-Optionsヘッダに、「SAMEORIGIN」もしくは「DENY」を設定
他ドメインのサイトが、iframeであなたのサイトを読み込めてしまうのが原因
「iframeで読み込み可能なページに、更新系の処理が実装されていること」が根本原因
iframeで他のサイトを埋め込むこと自体は別に悪いことではなく、例えばWebページ上でYouTube動画を再生できるような仕組みはiframeで構成されています。
X-Frame-Optionsヘッダに、「SAMEORIGIN」もしくは「DENY」を設定
SSMパッチマネージャー利用時のハマりポイントをまとめてみた
System Manager > パッチマネージャ
「パッチ適用の設定」ボタンをクリック
パッチを適用するインスタンス
| 項目 | 値 |
|---|---|
| 選択 | インスタンスタグを入力する |
| インスタンスタグ/キー | ForceWindowsUpdat |
| インスタンスタグ/値 | true |
パッチ適用スケジュール
| 項目 | 値 |
|---|---|
| パッチ適用の指定方法 | 新しいメンテナンスウィンドウでスケジュールを作成する |
| メンテナンスの指定方法 | CRON スケジュールビルダーを使用 |
| メンテナンスの実行頻度 | 毎日 / 11:00 UTC |
| メンテナンスの最大時間 | 2時間 (※) |
| メンテナンス名 | ForceWindowsUpdate |
(※)
20:00 JST から、WindowsUpdateを開始する
22:00 JST にOSを停止を実行するので、2時間あればUpdate終わると予想
パッチ適用オペレーション
| 項目 | 値 |
|---|---|
| アクション | スキャンのみ |
※「インストール」は、パッチ適用後に再起動が発生するので注意
「パッチ適用の設定」ボタンをクリック
System Manager > メンテナンスウィンドウ
※
Patch Managerからのパッチ適用は
内部的には、Run Command で、AWS-RunPatchBaseline を実行しているだけ
※
AWS-RunPatchBaseline は
ベースライン(適用するパッチの種類(クリティカルとか)指定)をパラメータに取らない
※
パッチのあたったインスタンスは強制的に再起動がかかります
EC2インスタンスにタグをつける
| 項目 | 値 |
|---|---|
| タグ名 | ForceWindowsUpdate |
| 値 | true |
IAM > ポリシー > ポリシーの作成 > JSONタブ
1 | { |
ポリシーの確認
| 項目 | 値 |
|---|---|
| Name | SNSPublishPermissions |
ポリシーの作成ボタンをクリック
IAM > ロール > ロールの作成
AWSサービス > EC2 を選択し、「次のステップ:アクセス権限」ボタンをクリック
アタッチするポリシー選択画面で、作成した「SNSPublishPermissions」を選択
「次のステップ:タグ」ボタンをクリック
「次のステップ:確認」ボタンをクリック
ロール名 を入力
| 項目 | 値 |
|---|---|
| Name | AmazonSNSFullAccess |
「ロールの作成」ボタンをクリック
作成したロールを選択
「信頼関係」タブを選択し、”ssm.amazonaws.com” を既存のポリシーに追加
1 | { |
※
EC2 / SNS
SNS > トピック > トピックの作成
| 項目 | 値 |
|---|---|
| 名前 | run_command_report_to_slack |
| 表示名 | - |
| 暗号化 | 無効 |
| アクセスポリシー | 基本 |
| メッセージ発行を許可するユーザー | トピック所有者のみ |
| トピックにサブスクライブを許可するユーザー | トピック所有者のみ |
| 再送ポリシー | デフォルト |
| ログ記録 | なし |
トピックの作成
Lambda関数
| 項目 | 値 |
|---|---|
| 名前 | Func-PatchManager_slack |
| ランタイム | Node.js v10 |
| 実行ロール | lambda_basic_exection |
| 説明 | PatchMangerがEC2のアップデートを実行した結果をSlack通知 |
| ネットワーク | 非VPC |
1 | console.log('Loading function'); |
Lambdaに SNSのトリガーを追加
| 項目 | 値 |
|---|---|
| トリガー | SNS |
| トピック | arn:aws:sns:ap-northeast-1:xxx:run_command_report_to_slack |
| 有効化 | on |
System Manager > メンテナンスウインドウ > 対象を選択
「タスク」タブ > 対象を選択 > 編集
SNS通知
| 項目 | 値 |
|---|---|
| SNS通知を有効化 | ON |
| ロール | AmazonSNSFullAccess |
| SNSトピック | arn:aws:sns:ap-northeast-1:xxx:run_command_report_to_slack |
| 次の場合通知する | 成功/タイムアウト/キャンセル済/失敗 |
| 通知 | コマンドのステータスが変更された場合のコマンド概要 |
AWS Lambdaの初回起動が遅い問題を解決する魔法の設定
Lamda関数のトリガを開く
「設定」タブで、「トリガーを追加」をクリック
「CloudWatch Events」を選択
「新しいルール」を選択
| 設定値 | 値 |
|---|---|
| ルール名 | Lambda-WarmUp |
| 説明 | Lambdaの暖気運転 |
| ルールタイプ | スケジュール式 |
| スケジュール式 | rate(5 minutes) |
| トリガーの有効 | ON |
「追加」をクリック
5分間隔程度がおススメ
https://linuxfan.info/yum-exclude-packages
Samba はバージョンアップすると、設定ファイルの互換性がないようなので
yum update の対象外としておく
1 | exclude=samba* libwbclient* |
https://stackoverflow.com/questions/34378122/load-blade-assets-with-https-in-laravel
♯ 修正
1 | <link href="{{ asset('assets/mdi/css/materialdesignicons.min.css') }}" media="all" rel="stylesheet" type="text/css" /> |
↓
1 | <link href="{{ secure_asset('assets/mdi/css/materialdesignicons.min.css') }}" media="all" rel="stylesheet" type="text/css" /> |
composer install
composer.jsonにかいてcomposer update
クラウド型WAFを導入している場合、IPアドレスでELBに直アクセスされると、WAFによるセキュリティチェックを回避されてしまう。
ALB(Appliation LoadBalancer) > 「リスナー」タブを選択
「HTTP:80」のルール表示
HTTPのアクセスは、HTTPSへ301リダイレクトさせる
| IF | Action |
|---|---|
| パス * | リダイレクト先 HTTPS/443 カスタムホスト、パス、クエリを使用 ホスト: www.example.co.jp パス: /#{path} クエリ: #{query} 301 - 完全に移動されました |
AWS S3とCloudFrontにCORSの設定をしてCSSファイルやJSファイルを配信する
CORS(Cross-Origin Resource Sharing)
Cross-Origin Resource Sharing
スキーム(http://やhttpsなど)
ホスト名(example.comなど)
ポート番号(:3000など)
のこと。
システム構成
ブラウザは、Bへのリクエストヘッダーにアクセス元のオリジン情報を付加
1 | Origin: http://A-site.example.com |
Bは、Aへのアクセスを許可する場合に下記レスポンスヘッダを返す
1 | Access-Control-Allow-Origin: http://A-site.example.com |
ブラウザはレスポンスを見て、許可された別オリジンへのアクセスと判断する


S3に置いたコンテンツをCloudFrontでキャッシュして配信する構成の場合、HTTPヘッダーもキャッシュする設定にしないと、せっかく組んだCORSの設定が反映されない
CloudFrontの設定画面
CloudFrontは設定を変更しても今キャッシュされているファイルが、再度オリジンから取得されるわけではない。 そこで、コンテンツをオリジンから再取得するために、以下のどちらかの操作をする必要がある。
Ruby on Rails などのフレームワークは、1番目の方法
Asset Pipelineを利用して、CSSやJavaScriptをビルドしている
ただ、一度プリコンパイルしたCSS・JavaScriptファイルは変更しないと、ダイジェストが変わらないので注意
firebase_admob のサンプルコードではバナータイプが「smartBanner」になっている。
1 | BannerAd myBanner = BannerAd( |
スマートバナーの説明は、公式ページに書いてある。
スマートバナーは、
あらゆる画面サイズのデバイスで、画面をどの向きにしていても横幅いっぱいに広告を表示できる広告ユニットです。
デバイスの向きに応じて画面の横幅が検知され、そのサイズの広告ビューが作成されます
| 広告の高さ | 画面の高さ |
|---|---|
| 32 dp | 400 dp 以下 |
| 50 dp | 400 dp 超、720 dp 以下 |
| 90 dp | 720 dp 超 |
画面サイズによって、表示される広告の高さが変わる仕組み。
1 | class MyApp extends StatelessWidget { |
まだコミットしていない前提
まだコミットされていない変更を一旦脇に置いて、何の変更もないクリーンな状態に戻す
1 | git stash save |
クリーンな状態に戻ったことを確認
1 | git status |
新しい作業用ブランチを作成して移動
1 | git checkout -b 作業ブランチ |
現在のブランチを確認
1 | git branch -a |
脇に置いた変更を作業用ブランチに取り込む
1 | git stash pop |
Update your browser to view this website correctly. Update my browser now