StackOverflow上有一个关于使用收据验证实现应用内购买的很好的post。然而,出于安全原因,它警告不要按原样使用该代码。这一观点在许多教程甚至Apple documentation中都能找到。例如,它提到不要这样做:
if (failedValidation) {
exit(173);
}这很好,但是你应该如何做这样的事情呢?在此示例中,将验证收据是有效还是无效,并在无效时退出。
我看到了很多“做什么”和“不做什么”的列表,但没有多少关于该做什么的例子或想法。例如,使用opague predicate,但维基百科没有提到一个具体的例子。
我知道我们不应该都使用相同的代码,但是一些指针(或者关于这个主题的一种思考方式)会很有用。我希望有人能够像我这样的初学者手把手地完成这方面的最佳实践。谢谢!
发布于 2015-07-17 23:18:12
如果你正在做收据验证,你可能走在了曲线的前面。如果你想在一些样板代码中添加不透明的谓词,你可以这样做:
@property (nonatomic, assign) BOOL opaque;
- (instancetype)init {
...
_opaque = YES;
...
}
- (BOOL)someVerifyMethod {
if (self.opaque) {
...
} else {
// fake block
}
}不过,老实说,在修复它之前,您可能会等着看是否有真正的问题--这是一个成本/收益计算,虽然理论上每个使用相同代码的人都会带来问题,但尚不清楚利用漏洞的风险是否特别高。
毫无疑问,人们对此意见不一,但归根结底,这既是一个工程决策,也是一个商业决策。
https://stackoverflow.com/questions/31458194
复制相似问题