1. まとめトップ

iOSの開発って、なかなか大変ですよね。
何が大変っていうと、特にデバッグが大変なんです。

そんなとき、よく使われるのが NSLog というマクロ。
これを使うと、今プログラムがどういう状態にあるのか、
今どの処理を行なっているのか、とかそういう事が手に取るようにわかっちゃうんです。
こんな便利なもの使わなきゃ損ですよね!

だけど、意外な落とし穴も…

例えば、今どこの処理をしているかとか、そういった事を出力しているだけなら
良いのですが、よくあるパターンでは、サーバーから取得してきたデータに
どういう情報が格納されているか、をNSLogを使って出力しちゃったりなんて
ことが往々にして行われたりします。

そして、例えばAppStoreに登録されたら、NSLogが自動的にされなくなる、という
ような仕組みならばいいんですが、これはそういう仕組みではないので、
NSLogが埋め込まれたままのアプリがAppStoreにはゴロゴロあったりするんです。

具体的にどういうことになるの?

では実践してみましょう。

例えば、App Store で自動的に流れてくる音楽を聞けるアプリを
インストールしてみたとします。

これで簡単に音楽が聞けるらしい。

利用にはFacebookやTwitterのアカウントが必要らしい。
まあいっか〜、Facebookで接続しよう。

と、ここでおもむろにiOSの統合開発環境であるところの XCode を立ち上げます。

そして、WindowメニューからOrganizerを選択。
接続されているiPhoneのリストが出てくるので、該当端末のConsoleを開きます。
すると…

ずらずらーっと画面に出力されてきました。
これがデバッグ出力された情報なのです。

でもだからなんなの?

別に意味の分からない内容が出てくるだけだから、いいんじゃないの?
と思うでしょう。
でも、このアプリにある「マイページ」という画面を開いてみると…

小さくてみえませんが、こんな感じです。

<Warning>: started http request by url ==== https://***********/v1/userProfile?dispB2cContractorId=*****&b2cContractorId=******&autoLoginKey=*****************************&needPushList=1&clv=1.0.3
<Warning>: responseText ===== <response>
<status>success</status>
<b2cContractor>
<id>*****</id>
<nickName>***</nickName>
<loginid>****************@Facebook</loginid>
<contractType>3</contractType>
<contractEnd class="sql-timestamp">2111-09-26 17:43:14.0</contractEnd>
<status>4</status>
<paymentType>0</paymentType>
<profileImg>http://**************/14439_N0rxw27Z.jpg</profileImg>
<profileIntroduction>


なんだかごちゃごちゃとよくわかりませんが、URLとXMLデータのようなものが
流れてきました。
個人情報っぽい所は伏字にしてあります。

get Profile ってかいてるからプロフィールを取得してるのかしら
と思って、おもむろにURLをブラウザに貼り付けてみます。

すると。

しかもFacebookアカウントとか、IDとか情報が書いてあるんだけど…

しかもこれ、これを表示したURLの所を見てみると、個人を特定しているのは
ただの数値っぽいんですよね〜

と思って、その所をちょちょいと変えてやると…

しかもFacebookIDやメールアドレスなんかも書いてある…
これちょっとしたプログラムかいたらこのアプリ使ってる人の個人情報ぶっこぬけるんじゃ…

※URLから上記の情報も得られましたが、こんなことしなくてもConsoleをみてるだけで、他人のプロフィールページを開くとガンガン個人情報が出力されます。

という大変なことになってしまいます

なので、しっかりとデバッグ情報等は出力しないようにしてから
ストアへ公開しましょう。

このケースの場合はそれ以前に、認証条件が整っていないと
プロフィールが取得できないとか、なんらかの縛りをいれる必要があると思いますけど。
できれば早急に対処して欲しい次第です。


自分は下記マクロをprefix.pch へ挿入することでリリースビルド時には
自動的に削除するようにしています。

#if !defined(NS_BLOCK_ASSERTIONS)

#if !defined(NSLog)
#define NSLog( args... ) NSLog( args, 0 )
#endif

#else

#if !defined(NSLog)
#define NSLog( args... )
#endif

#endif

1





mad_ochiさん

まとめられたい



  • 話題の動画をまとめよう