ログ出力

【リスク】
リリースビルドでも閲覧できるログから、
悪意ある攻撃者に有益な情報を与えてしまう可能性があります。

何もハンドリングせずに実装してしまうと
リリースビルドにおいてiOSはログ出力をXcodeで閲覧可能、
Androidはandroid.util.Logクラスでのログ出力を
LogCatで閲覧可能となってしまいます。

【対策】
・iOS
NSLog、OSLog、printなどでログ出力する際、
リリースビルドではプリプロセッサマクロでNSLogを無効化しましょう。

プリプロセッサマクロでデバッグビルドはログ出力し、
リリースビルドにおいてはログが出力されないように実装しましょう。

・Android
カスタムログクラスにログ関数を用意しましょう。

注意しなければならないのはLog.dメソッドです。
"d"はデバッグを意味しますが、
これを使用するだけだとリリースビルドでもログ出力します。
なので、BuildConfig.DEBUGで判定し、
デバッグビルド時のみログ出力するようにしましょう。

社内システムやサーバーサイドアプリでは、不具合やトラブルが起きた時の保守運用のために欠かせないログですが、モバイルアプリでは、ログはモバイル端末上に出力・保存されるので、保守運用者がそのログを直接確認するハードルは非常に高いです。また、悪意あるユーザーがログを解析し情報を盗まれたり、攻撃の糸口にされる危険性があります。攻撃者に対して情報を与え解析されてしまわぬように、リリースビルドではデバイス内にログを出力しない実装を心がけましょう。

もし、クラッシュ時のエラーの詳細などを取得したい場合は、標準のログ機能より、Firebase Crashlyticsのようなクラッシュレポート用のSDKを導入することが推奨です。

目次に戻る