проверка получения iap: безопасность

Существует отличный опубликовать на StackOverflow о внедрении покупок в приложении с проверкой квитанции. Однако он предупреждает не использовать этот код как есть по соображениям безопасности. Это мнение встречается во многих учебниках и даже в Документация Apple. Например, в нем упоминается, что этого делать нельзя:

if (failedValidation) {
    exit(173);
}

Это здорово, но тогда как вы должны сделать что-то подобное? В этом примере это будет проверка того, что квитанция действительна или недействительна, и выход, если она недействительна.

Я видел много списков того, что можно и чего нельзя делать, но не так много примеров или идей о том, что делать вместо этого. Например, используйте непрозрачный предикат, но в Википедии нет ни одного конкретного примера.

Я понимаю, что мы не должны все использовать один и тот же код, но некоторые указатели (или способ мышления по этой теме) были бы полезны. Я надеюсь, что кто-то достаточно любезен, чтобы помочь новичкам, таким как я, ознакомиться с лучшими практиками в этом. Спасибо!


person user965972    schedule 16.07.2015    source источник


Ответы (1)


Если вы вообще выполняете проверку квитанций, вы, вероятно, впереди кривой. Если вы хотите добавить непрозрачные предикаты к некоторому шаблонному коду, вы можете сделать что-то вроде этого:

@property (nonatomic, assign) BOOL opaque;
- (instancetype)init {
    ...
    _opaque = YES;
    ... 
}

- (BOOL)someVerifyMethod {
    if (self.opaque) {
    ...
    } else {
    // fake block
    }
}

Честно говоря, вы, вероятно, могли бы подождать и посмотреть, есть ли у вас реальная проблема, прежде чем исправлять ее - это расчет затрат / выгод, и хотя все, кто использует один и тот же код, теоретически создает проблему, неясно, что риск эксплойта особенно высок.

Несомненно, мнения по этому поводу расходятся, но в конечном счете это не столько инженерное, сколько деловое решение.

person Ben Flynn    schedule 17.07.2015