0

序文: 私は iOS 開発者ではなく、iOS のセキュリティ モデルについてほとんど知りません。この質問が本当にばかげている場合は、ご容赦ください。:)

起動時に次のことを行う MyApp というアプリを考えてみましょう。

  1. たとえば、malloc() を使用して、メモリのチャンクを動的に割り当てます。
  2. ネットワーク経由でいくつかの機密データをロードし、そのメモリのチャンクに保存します。
  3. そこに座って何もしない。

ここで、次のシナリオを検討してください。

  1. ユーザーが MyApp を起動します。
  2. ユーザーが MyApp を閉じます。
  3. ユーザーが SomeOtherApp を起動します。

私の質問: SomeOtherApp も動的にメモリを割り当てる場合、OS によって返されたバッファーの 1 つに、MyApp の (現在は閉じられている) 呼び出しによって配置された機密データが含まれる可能性はありますか?

それとも、RAM の内容は、アプリが実行されるサンドボックスの一部として扱われますか?

4

1 に答える 1

-1

理論的には、ユーザーがアプリを閉じると (バックグラウンドで実行されているだけでなく、アプリが閉じられていることを確認する必要があります)、そのプロセスに割り当てられていたメモリの割り当てが解除され、返されます。

ARC のチュートリアルから引用するには:

「自動参照カウントを有効にすると、コンパイラは自動的に保持、解放、および自動解放をプログラムの正しい場所に挿入します。コンパイラがそれを行うので、これについて心配する必要はもうありません。」

そのため、アプリが終了すると、アプリが実行されていないときに参照するオブジェクトがないため、何らかのメモリ割り当てがあったオブジェクトへのすべての参照がクリアされます。

必ず閉じておく必要があると言う理由は、一部のアプリはデフォルトではホームボタンを押しても閉じず、実際にはバックグラウンドで実行し続けるためです. これは潜在的なセキュリティ上の脅威を引き起こす可能性がありますが、可能性は低いです。そのアプリによってまだメモリが保持されていないことを確認するには、毎回実際に完全に閉じていることを確認してください。コードが正しく作成されていること、およびそれを書いている人が自分が割り当てたメモリを認識して追跡していることを確認してください。

セキュリティが大きな問題である場合は、割り当てられたすべてのメモリがコード内で適切に割り当て解除されるようにしてください。次に、メモリ リークやその他のことについて非常に多くのテストを実行して、オブジェクトがある程度のメモリを残して残っていないことを確認してください。

私はARCのメモリ管理の専門家ではないので、私の答えが正しいことを確認するために、他のいくつかの情報源を確認することをお勧めします.

私が間違って話したら、誰かが私を殴った。

于 2013-07-18T02:36:51.433 に答える