iPhoneデバイスIDを検証する方法はありますか? iPhoneのユーザーからHTTPリクエストで送信されたデバイスIDを受け入れ、正当なデバイスに接続されていることを検証できるようにしたいと考えています。iPhoneデバイスのIDを検証しますか?
答えて
本当にIDを検証する方法であれば、実際の偽のIDを作成する方法があります。
私はタイラーのコメントに同意する、のIds(簡単)を作成する方法がありますし、(も簡単に)それらを検証するが、「偽」のIDを作成するために、全体の鍵空間(ハード)をスキャンするか、盗む必要になりますキーを生成したプライベートキー(TLSの実際の動作) 私の最初のコメントは無効です。
決して少なくは、これはあなたが直接[[UIDevice currentDevice] uniqueIdentifier]
を使用してというよりも促しそれをつかむ場合(例えばMACアドレス)
中央有効なIDSのDBですか? –
おそらくありますが、リンゴは決して近くに近づけないでしょう。 シリアルナンバーを閲覧できるようにした(主要な)会社はありません。 –
この文は、現代の暗号がどのように機能するかの誤解に基づいています。現代の暗号は、計算が簡単ではあるが逆転することの難しい機能があるという考えに基づいています。たとえば、公開鍵暗号では、誰でもメッセージを暗号化できますが、受信者だけが復号化できます。すべてのUDIDのほんの一部が有効であれば、擬似UDIDを生成するには時間がかかるでしょう。 – Tyler
Idが働くAppleデバイスは、私の知る限り、彼らはハードウェアの様々な値をIDからIDを生成する方法ではありませんそのためにユーザーが正当なデバイスIDにならない理由はありません。
私はbpapaが自分のサービスにアクセスする敵対的なユーザーによって書かれた非iphoneクライアントを停止しようとしていると思います。 –
メッセージが偽造されていないことを確認するために、何らかの種類の署名を生成してみてください。たとえば、Flickrの署名メカニズム(このページの#8:http://flickr.com/services/api/auth.spec.html)を参照してください。 –
Flickrの方法の脆弱性に注意してください。詳細については、このペーパーを参照してください。TL; DRは、潜在的な偽造を避けるために、md5よりもsha1のようなものを使用します。 http://netifera.com/research/flickr_api_signature_forgery.pdf –
あなたのアプリからのリクエストを確認するには、UUIDとハッシュを送信することができます。ここで、hash = SHA1(UUID + SECRET_KEY_STORED_IN_APP)です。次に、サーバー側で同じハッシュ関数を実行し、一致することを確認します。タイムスタンプをナンスとして追加すると、UUID、タイムスタンプ、ハッシュ= SHA1(UUID + SECRET_KEY_STORED_IN_APP + TIMESTAMP)のハッシュを送信することができます。
これは確かに誤りではなく、多くの制限がありますが、UUIDを偽装するのが難しくなります。
秘密情報がアプリケーションバイナリに格納されている場合は、それを取得して共有することができます。秘密を安全に取得する唯一の方法は、初回起動時、SSL経由のWebサービスの呼び出し、鍵の取得、および電話のKeychainへの格納です。しかし、あなたがそれを行うと、他の誰かがあなたのアプリを模倣し、キーを取得することもできます。 – bbrown
すべてのセキュリティはコストメリットのトレードオフです。これは何よりも優れている平文よりも優れています。 –
サーバ側の機能は秘密鍵ではなく、SHA1(UUID + HASH + TIMESTAMP)ではないでしょうか、サーバはどのようにそれを取得できますか? @baalexander – Emil
Martin Gortonに対する回答として、サードパーティのライブラリはUIDeviceのuniqueIdentifierを信頼できません。Objective Cのメソッドスウィズリングを使用してこれを偽装するのは簡単です。
メソッドswizzlingは、クラス(UIDevice)に対して2つのセレクタ(uniqueIdentifierとspoofUniqueIdentifier)をスワップします。スウィズルの後、UIDeviceのuniqueIdentifierを後で呼び出すと、偽装されたUDIDが返されます。これは、有効なUDIDを持たないUDIDキー付きライブラリのテストに役立ちます。ここ
はhttp://marccodes.posterous.com/method-swizzling-uidevice-to-spoof-udidからいくつかのサンプルコードです:
#import <objc/runtime.h>
// swap a class's instance method selectors, we do this to overload existing methods in category declarations
void swizzleMethodsForClass(Class c, SEL origMethodSel, SEL newMethodSel)
{
NSLog(@"swizzling %@ instance methods: %@ -> %@", NSStringFromClass(c),
NSStringFromSelector(origMethodSel), NSStringFromSelector(newMethodSel));
Method origMethod = class_getInstanceMethod(c, origMethodSel);
Method newMethod = class_getInstanceMethod(c, newMethodSel);
// check if method is inherited from superclass
if(class_addMethod(c, origMethodSel, method_getImplementation(newMethod), method_getTypeEncoding(newMethod)))
class_replaceMethod(c, newMethodSel, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));
// exchange un-subclassed method
else
method_exchangeImplementations(origMethod, newMethod);
}
@interface UIDevice (SpoofUDID)
@end
#define UDID_TO_SPOOF @"e0101010d38bde8e6740011211af315301010223"
@implementation UIDevice (SpoofUDID)
// swizzle this instance method for UIDevice class
- (NSString *) spoofUniqueIdentifier
{
static NSString *spoofUDID = UDID_TO_SPOOF;
NSLog(@"spoofing %@ instead of %@", spoofUDID, [[UIDevice currentDevice]
spoofUniqueIdentifier]);
return spoofUDID;
}
@end
// call this from your app delegate
- (void) initUDID
{
NSString *UDID = [[UIDevice currentDevice] uniqueIdentifier];
NSLog(@"this is my old udid: %@", UDID);
swizzleMethodsForClass([UIDevice class], @selector(uniqueIdentifier), @selector(spoofUniqueIdentifier));
NSString *UDID2 = [[UIDevice currentDevice] uniqueIdentifier];
NSLog(@"this is my new udid: %@", UDID2);
}
この文字列にレイアウトを指定なしリンゴのドキュメントや仕様がありません。
AFAIKは、どのUDIDが本当であり、どれが偽であるかを知っています。
英数字で構成された長さは40文字です。 (-f0-9)
正規表現パターン:
[a-z0-9]{40}
正規表現^([A-F0-9]{40})$
またはあなたがhere and just paste itを行くことができるが、以下試してくださいUDIDを検証します。
あなたが[[UIDevice currentDevice].identifierForVendor UUIDString]
を使用している場合は、(そのあなたがすべき) - それはちょうどGUIDだ、a look at this 正規表現は(^([0-9A-Fa-f]{8}[-][0-9A-Fa-f]{4}[-][0-9A-Fa-f]{4}[-][0-9A-Fa-f]{4}[-][0-9A-Fa-f]{12})$
) であるか、paste it hereを可能性があります。
希望すれば、時間を節約できます。
- 1. 近くのiphoneデバイスを検索していますか?
- 2. iPhone OSアプリはデバイスのファイルシステムを検索できますか?
- 3. デバイス検証レイヤーvulkan
- 4. Apple IDでCodenameone証明書生成プログラムにiphoneデバイスを追加するクエリ
- 5. iPhoneまたはiOSデバイスの一意のIDを使用
- 6. iPhone SDKのクレジットカード検証アルゴリズム
- 7. 検証関数のパラメータとしてhtml idを渡します。
- 8. デバイスがiPhoneであるかどうかを検出する533
- 9. WebリクエストからiphoneデバイスIDを見つける
- 10. 入力IDのJavascript検証
- 11. 一意のID検証クエリ
- 12. iPhoneシミュレータのデバイスIDを確認する方法は?
- 13. を検証しますか?
- 14. 結合モデルのIDを検証することをお勧めしますか?
- 15. スプリングフォーム検証はデータベースの挿入を検証しますか?
- 16. このEF4検証アプローチを検証しますか?
- 17. laravelフォームで配列オブジェクトの検証を検証しますか?
- 18. RailsはJoin Tableの特定のIdの一意性を検証しますか?
- 19. Firebase IDトークン検証 - Java NoSuchMethod
- 20. 既知のIDを持つ隠れたBluetoothデバイスを検出します
- 21. iPhone 5とその下のiOSデバイスを検出する
- 22. iPhoneアプリケーションのTextFieldスペースの検証
- 23. iphoneでjQueryの検証が機能していません
- 24. iphoneでhtml5の検証が機能していません
- 25. プロビジョニングプロファイルにデバイスIDを追加せずにiphoneにipaファイルをインストール
- 26. iPhoneのデバイスIDが40文字の理由
- 27. イオンフレームワークを使用してiphoneでユニークなデバイスIDを取得する
- 28. デバイス上で実行するiPhone OSを指定しますか?
- 29. スキーマ検証:テーブル内の列[ID]が見つかりません
- 30. フォームはIDのメインコンタクトフォームなしで検証されません
私はそれを認識していません。あなたはAppleのデベロッパーボードについて聞いてみましたか? –
私はプッシュ通知がUDIDを検証する方法かもしれないと思っていましたが、そうではありません:https://devforums.apple.com/message/50658#50658 – bbrown
AFAIK 40文字の長さの検証を行うことができます –