English 中文(简体)
以最可靠和最可靠的方式保存收款人全权证书
原标题:best and secured way of storing paypal api credentials

Im 创建一个iPhone 应用程序, 整合iOS 的 PayPal API 。 API 发送请求时需要 API 证书。 我读了 PayPal API 并说

从不直接将您移动应用程序的快检请求发送到 PayPal 。 这些请求需要您的 PayPal API 证书。 将您的证书放置在移动设备上会使您和 PayPal 面临不可接受的安全风险。 只从安全服务器发送 Expreckout 请求 。

我的问题是,为了减少我的证书被暴露或黑入的可能性,以什么是保存API证书的最佳方式? 将证书附加到iPhone的建筑里是否有风险? 为什么或如何? 将这些证书储存在一个安全的服务器上是否足够可靠?

iOS上的钥匙链接入 Api 如何能帮助我呢?

最佳回答

将 API 密钥放入您的应用程序是完全不安全的。 使用各种技术的常态, 任何能够下载 AP 或用 AP 下载 APP 的手机的人都可以阅读 API 密钥。 即使您按 @ MatthiasBauch 的建议行事, 以后再下载密钥, 也仍然有效 。 即使您按 @ Rexeisen 的建议行事, 并混淆字符串 。

最好用用户在订阅服务中建的苹果处理付款(这可能不适用,他们削减了分数,但可能比在电话上能做的更安全)

即使你可能不想或不能这样做, 也给每个应用程序的每个例子一个独特的代号, 当他们用您控制的服务器下载时, 他们登记注册 。 这比支付证明书的分量要小, 并且会代表他们发出拨号 。 这样, 如果任何给定的电话被偷, 或有服务器的拨号键被读取, 您可以简单地撤销密钥, 您的付费的 API 密钥仍然安全 。 重要警告 : 在您实际撤销该应用程序密钥之前, 任何拥有该密钥的人仍然可以使用它来做所谓的服务器支持的东西。 这可能会是一件非常糟糕的事情 。

问题回答

风险在于您可以在任何应用程序上运行字符串工具( 尝试它, 它有点可怕), 并从代码中获取字符串 。 一般来说, 我建议在应用程序中包装这些秘密, 但将其保留在别处的安全服务器上 。 如果您必须把它放在应用程序中, 您可以做的一件事就是混淆字符串, 这样它就不明显了 。

NSString *secret = kTwitterClientSecret;
NSData *secretData = [secret dataUsingEncoding:NSUTF8StringEncoding];
NSString *key = @"Twitter";
[secretData obfuscateOrDeobfuscateWithKey:key];
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *path = [NSString stringWithFormat:@"%@/%@-%@", documentsPath, key, @"output"];
[secretData writeToFile:path atomically:NO];
NSLog(@"Wrote obfuscated data to: %@", documentsPath);

在 NSData 上, 模糊 Or Deobfuscate withkeey 是 NSData 的类别

// Inspiration from: http://iosdevelopertips.com/cocoa/obfuscation-encryption-of-string-nsstring.html
- (void)obfuscateOrDeobfuscateWithKey:(NSString *)key
{
    // Get pointer to data to obfuscate
    char *dataPtr = (char *) [self bytes];

    // Get pointer to key data
    char *keyData = (char *) [[key dataUsingEncoding:NSUTF8StringEncoding] bytes];

    // Points to each char in sequence in the key
    char *keyPtr = keyData;
    int keyIndex = 0;

    // For each character in data, xor with current value in key
    for (int x = 0; x < [self length]; x++) {
        // Replace current character in data with current character xor d with current key value.
        // Bump each pointer to the next character.
        *dataPtr = *dataPtr ^ *keyPtr;
        dataPtr++;
        keyPtr++;

        // If at end of key data, reset count and set key pointer back to start of key value
        if (++keyIndex == [key length]) {
            keyIndex = 0, keyPtr = keyData;
        }
    }
}

然后,你可以宣布一个常数是

static unsigned char const kTwitterClientSecret[] = {
    0x00, 0x00, 0x00, ... etc ... 
};
static unsigned int const kTwitterClientSecret_len = LENGTH;

然后把绳子拿回来,你就可以了

[NSString deobfuscatedStringWithBytes:kTwitterClientSecret length:kTwitterClientSecret_len key:@"Twitter"];

这是NSString的类别

+ (NSString *)deobfuscatedStringWithBytes:(const void *)bytes length:(NSUInteger)length key:(NSString *)key
{
    NSData *deobfuscatedData = [NSData dataWithBytes:bytes length:length];
    [deobfuscatedData obfuscateOrDeobfuscateWithKey:key];
    return [[NSString alloc] initWithData:deobfuscatedData encoding:NSUTF8StringEncoding];
}

这将做非常简单的混淆 并且不会出现在字符串中。





相关问题
Signed executables under Linux

For security reasons, it is desirable to check the integrity of code before execution, avoiding tampered software by an attacker. So, my question is How to sign executable code and run only trusted ...

MALICIOUS_CODE EI_EXPOSE_REP Medium

I run findbugs against all of my code and only tackle the top stuff. I finally got the top stuff resolved and now am looking at the details. I have a simple entity, say a user: public class User ...

XSS on jsbin.com

Anyone know if jsbin.com implements any protection for XSS or other javascript attacks? I see jsbin links used fairly regularly on sites like this one and I can t find any indication from the site ...

Make md5 strong

Im making a website that will intergrate with game that only support md5 hashing metod (atm). Which ofc is not especially safe anymore. But how could i make it stronger? Should I just generate long ...

Why running a service as Local System is bad on windows?

I am trying to find out the difference between difference service account types. I tumbled upon this question. The answer was because it has powerful access to local resources, and Network Service ...

Brute-force/DoS prevention in PHP [closed]

I am trying to write a script to prevent brute-force login attempts in a website I m building. The logic goes something like this: User sends login information. Check if username and password is ...

热门标签