25 Şubat 2016 Perşembe

Application Transport Security

Application Transport Security (Uygulama Taşıma Güvenliği) nedir?

WWDC 2015 konferasında; Apple, iOS 9 ve OSX 10.11 El Capitan için “Uygulama Taşıma Güvenliği”ni duyurdu. Konferansta sunulan “iOS’taki yenilikler neler” kılavuzunda konuyla ilgili olarak aşağıdaki bilgiler yer alıyordu:

App Transport Security (ATS) lets an app add a declaration to its Info.plist file that specifies the domains with which it needs secure communication. ATS prevents accidental disclosure, provides secure default behavior, and is easy to adopt. You should adopt ATS as soon as possible, regardless of whether you’re creating a new app or updating an existing one.
If you’re developing a new app, you should use HTTPS exclusively. If you have an existing app, you should use HTTPS as much as you can right now, and create a plan for migrating the rest of your app as soon as possible.

Kısaca özetlemek gerekirse, mobil uygulamalar yüksek ihtimalle HTTP protokolü ile çalışan bir sunucuya bağlanırlar (örneğin seninsunucun.com). Eğer bu sunucu en son SSL teknolojisini desteklemiyorsa (TLS v1.2 ve üzeri) bağlantı aşağıdaki gibi bir hata mesajı verir ve istek başarısız olur;

CFNetwork SSLHandshake failed (-9801)
Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo=0x7fb080442170 {NSURLErrorFailingURLPeerTrustErrorKey=, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorCodeKey=-9802, NSUnderlyingError=0x7fb08055bc00 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1200.)", NSLocalizedDescription=An SSL error has occurred and a secure connection to the server cannot be made., NSErrorFailingURLKey=https://yourserver.com, NSErrorFailingURLStringKey=https://yourserver.com, _kCFStreamErrorDomainKey=3}

İlginç bir şekilde kod siz http yazmış olmanıza rağmen bağlantıyı https olarak dener. Burada Apple bize derinden bir mesaj vermektedir, http kullanarak kullanıcıyı tehlikeye atmak ancak dikkatsizlik sonucu olabilir. Yoksa bu çağda http kullanmak kesinlikle gariptir :)

UYARI : ATS sizin ve kullanıcılarınız için iyi birşey ve bunu iptal etmemeniz önerilir!

Apple’ın burada herkesi zorla https’e çekmesinin tek sebebi bunun son kullanıcı için iyi bir şey olmasıdır. HTTPS kişisel datanın güvenli olmayan bir bağlantı üzerinden ele geçirilmesini önler ve kullanıcılar için harikadır. Tabii bu şekilde kuralların varolması sizin onları kullanmak zorunda olduğunuzu göstermez.

Eğer uygulamanız kontrolünüz dışında bir 3. parti API’ye bağlanıyorsa ya da bir RSS kaynağı gibi güvenliğin çok da gerekli olmadığı bir siteden veri çekiyorsa aşağıdaki yöntemleri kullanabilirsiniz.

Tabii eğer sunucu size aitse asıl yapmanız gereken sunucuya SSL desteği yüklemektir.

ATS‘i nasıl atlatırız?

Domain Bazında Hariç Tutma

Güvenli olmayan (TLS 1.2 altı) bir sunucuya bağlanmak için aşağıdaki kodu Info.plist dosyanıza eklemeniz gerekmektedir.

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.1</string>
    </dict>
  </dict>
</dict>
Peki ya Güvensiz Domain adreslerini bilmiyorsam?

Eğer uygulamanızın içinde birden fazla SDK mevcutsa ve siz bu SDK’lerin nerelere bağlantı açtığını bilmiyorsanız (örneğin bir reklam SDK’sı ya da analitik çözümü) aşağıdaki kodu kullanarak ATS’yi tamamen ortadan kaldırabilirsiniz. Ancak Apple’ın yakın dönem içinde AppStore kabul sürecinde bu kullanıma kuşkucu yaklaşacağını düşünüyorum;

<key>NSAppTransportSecurity</key>
<dict>
  <!--Include to allow all connections (DANGER)-->
  <key>NSAllowsArbitraryLoads</key>
      <true>
</true></dict>

Hiç yorum yok:

Yorum Gönder