ट्रांसपोर्ट सिक्योरिटी ने क्लियरटेक्स्ट HTTP को ब्लॉक कर दिया है


1451

info.plistनिम्नलिखित त्रुटि संदेश के अनुसार HTTP मोड को सक्षम करने के लिए मुझे किस सेटिंग की आवश्यकता है ?

असुरक्षित होने के बाद से ट्रांसपोर्ट सिक्योरिटी ने क्लियरटेक्स्ट HTTP (http: //) रिसोर्स लोड को ब्लॉक कर दिया है। अस्थायी अपवादों को आपके ऐप की Info.plist फ़ाइल के माध्यम से कॉन्फ़िगर किया जा सकता है।

Xcode

मान लें कि मेरा डोमेन है example.com



15
मॉडरेटर नोट : इस प्रश्न के पहले से ही 36 उत्तर हैं। दूसरा जोड़ने से पहले , कृपया सुनिश्चित करें कि आपका समाधान नया है
मैट

5
नोट: यहां समाधान बताता है कि आपको एटीएस को बंद करना चाहिए ( Allow arbitary loads)। जल्द ही यह संभव नहीं होगा क्योंकि ऐप्पल को एटीएस (मूल रूप से वर्ष के अंत - समय सीमा को बढ़ा दिया गया है) की आवश्यकता होगी - डेवलपर
।apple.com/news/?id=12212016b


@Jeef आपने iOS 10 टैग क्यों जोड़ा है? क्या उस मामले में iOS 10 में कोई अतिरिक्त बदलाव हुए थे? मुझे ऐसा लगता है कि इसे iOS9 में पेश किया गया था और यह टैग iOS संस्करणों के संदर्भ में पर्याप्त होना चाहिए
जूलियन क्राल

जवाबों:


468

यदि आप Xcode 8.0+ और स्विफ्ट 2.2+ या यहां तक ​​कि उद्देश्य C का उपयोग कर रहे हैं:

यहां छवि विवरण दर्ज करें

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>example.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

29
क्यों NSAllowsArbitraryLoadsसेट किया गया है true? आप एटीएस के उद्देश्य को घटाते हैं। इसके अलावा दुनिया में सबसे खतरनाक कोड देखें : गैर-ब्राउज़र सॉफ़्टवेयर में एसएसएल प्रमाणपत्रों को मान्य करना । आपके सॉफ़्टवेयर ने केवल सूची बनाई है।
jww

6
@jww यह इस पोस्ट का उद्देश्य है। ऑडियो चलाने के लिए मुझे जिस साइट से कनेक्ट करने की आवश्यकता है वह अभी तक HTTPS का उपयोग नहीं करती है और मैं प्रतीक्षा करने की कोशिश नहीं कर रहा हूं।
थिंकडिजिटल जूल

5
यह iOS 10.0+ या MacOS 10.12+ में काम नहीं करेगा। यह वास्तव में उन उल्लिखित सभी उदाहरणों को लोड करने की अनुमति देने के लिए कहता है (example.com)। इस प्रकार यह जो वांछित है उसका उलटा करेगा। NSAllowsArbirteathLoads यहाँ झूठे में सेट किया जाना चाहिए। अधिक जानकारी: Apple डॉक्स
फ्री सैंड सैंडर्स

1
सहमत हूं, पृथ्वी पर हर कोई इसे क्यों बढ़ा रहा है? यदि आप एक अपवाद डोमेन सेट करते हैं तो NSAllowsArbiteathLoads का उपयोग करने का कोई मतलब नहीं है।
थिबुत नोआ

1
NSAllowsArbiteathLoads को सही होने की आवश्यकता नहीं है, इसलिए इसे हटा दिया जाना चाहिए। NSExceptionDomains पर्याप्त है जो केवल उस डोमेन के लिए असुरक्षित कनेक्शन को सक्षम करता है। NSAllowsArbiteathLoads = true किसी भी डोमेन के लिए nonsecure कनेक्शन को सक्षम करेगा ताकि अगर अभी भी इसे सही पर सेट किया जाए तो NSExceptionDomains बकवास हो सकती है क्योंकि इसमें पहले से ही सभी डोमेन शामिल हैं
mister_giga

950

NSAppTransportSecurity का उपयोग करें:

यहां छवि विवरण दर्ज करें

आप स्थापित करने के लिए NSAllowsArbitraryLoads की कुंजी हाँ तहत NSAppTransportSecurity अपने Info.plist फ़ाइल में शब्दकोश।

Plist विन्यास


157
इसे जाने दो: यह एक काम है! जब भी आप HTTPS से अधिक HTTP का उपयोग कर रहे हैं, तो आप कमजोरियों के लिए अपने उपयोगकर्ता के उपकरण खोल रहे हैं। यकीन है कि यह कई मामलों में संभावना नहीं है, लेकिन नैतिक प्रोग्रामिंग सबसे अच्छा अभ्यास है। बस 'कह ... - भी, काम के लिए +1 (परीक्षण प्रयोजनों के लिए)
जैक्सनक्रा

36
यह एक समाधान नहीं है - यह एक हैक है! व्यक्तिगत डोमेन "अपवाद" जोड़ने के लिए नीचे इस उत्तर को देखें: stackoverflow.com/a/32560433/1103584
DiscDev

17
जबकि यह समाधान कमजोर होने के लिए जाना जाता है, यह एकमात्र उपाय है जिसे मैं विकास के दौरान सुझाऊंगा । विकास के दौरान हर सटीक डोमेन में टाइप करना सिर्फ मूर्खतापूर्ण है (खासकर यदि आप थर्ड पार्टी वेब सेवाओं का उपयोग कर रहे हैं)।
Rets

6
उन कुंजियों के नाम अब "ऐप ट्रांसपोर्ट सिक्योरिटी सेटिंग्स" बदल गए हैं, जिनके तहत "अनुमति दें"
विपरीत

11
इस समाधान के खिलाफ इतने सारे लोग क्यों हैं? यह निश्चित रूप से एक हैक नहीं है! कई ऐप्स को वास्तविक इंटरनेट से संवाद करने की आवश्यकता होती है जहां सुरक्षा प्रोटोकॉल हमेशा आपके नियंत्रण में नहीं होता है। उदाहरण के लिए, ऐसे अन्य सर्वर से चित्र दिखाने में सक्षम होना बहुत उचित लगता है जिनके पास एसएसएल प्रमाणपत्र नहीं है।
ओरेन

825

यहाँ सेटिंग्स नेत्रहीन हैं:

NSAllowsArbiteathLoads के लिए दृश्य सेटिंग्स। Xcode GUI के माध्यम से जानकारी दें


10
मेरे पास वह विकल्प नहीं है।
यूजर

25
यदि आप अपनी Info.plist को सीधे खोलते हैं, तो आप केवल NSAppTransportSecurity डिक्शनरी जोड़ सकते हैं , और फिर उसके भीतर NSAllowsArbitavorLoads आइटम बना सकते हैं (नीचे उमर फारूक द्वारा संपादित उत्तर देखें)।
स्टोफ

3
यहाँ भी - अपवाद डोमेन मेरे लिए 7.3 के साथ काम नहीं किया।
नियमित एक्सप्रेशन

4
यह विकल्प मौजूद नहीं है - XCode 7.3.1
jameshfisher

3
@JoshPinter से मिली जानकारी ने मेरे लिए XCode 8. के ​​साथ काम किया।
मैथ्यू बेलेंटोनी

717

फोरम पोस्ट देखें आवेदन परिवहन सुरक्षा?

इसके अलावा iOS 9 और OSX 10.11 में ऐप ट्रांसपोर्ट सिक्योरिटी एक्सेप्शन को कॉन्फ़िगर करने वाला पेज ।

उदाहरण के लिए, आप एक विशिष्ट डोमेन जोड़ सकते हैं जैसे:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>example.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>

आलसी विकल्प है:

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

ध्यान दें:

info.plist एक XML फ़ाइल है जिससे आप इस कोड को कम या ज्यादा फ़ाइल के अंदर रख सकते हैं।


1
मैं यह कैसे कर सकता हूं, मेरा मतलब है कि इस कोड को Info.plist में जोड़ने का तरीका क्या है क्योंकि मुझे नहीं पता कि इस कोड को कहां पेस्ट करना है?
lmiguelvargasf

2
@lmiguelvargasf अपनी जानकारी खोलें। एक सादे टेक्स्ट एडिटर में शामिल हों
Dan Beaulieu

7
मुझे अभी भी त्रुटि मिलती है: अपवाद डोमेन सेट है और NSAllowsArbiteathLoads गलत है। यहां तक ​​कि NSAllowsArbiteathLoads के साथ भी त्रुटि दिखाई जाती है। यहाँ किसी और को यह मुद्दा है?
कालदेव

3
NSExceptionAllowsInsecureHTTPLoads NSExceptionMinimumTLSVersion देखें: 2016/01/30 एप्पल डॉक शो के रूप में कुंजी अब उन्हें में अस्थायी शब्द, जैसे कि developer.apple.com/library/prerelease/ios/documentation/...
फिलिप मोनेट

3
यदि कोई व्यक्ति अपने बालों को बाहर निकाल रहा है, तो क्योंकि इन सरल बदलावों से info.plist काम नहीं कर रहा है .. प्रोजेक्ट में परिवर्तन> लक्ष्य> जानकारी> कस्टम iOS लक्ष्य गुण
BlueGuy

330

यह परीक्षण किया गया था और iOS 9 जीएम बीज पर काम कर रहा था - यह HTTPS के बजाय HTTP का उपयोग करने के लिए एक विशिष्ट डोमेन को अनुमति देने के लिए कॉन्फ़िगरेशन है :

<key>NSAppTransportSecurity</key>
<dict>
      <key>NSAllowsArbitraryLoads</key> 
      <false/>
       <key>NSExceptionDomains</key>
       <dict>
            <key>example.com</key> <!--Include your domain at this line -->
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
            </dict>
       </dict>
</dict>

NSAllowsArbitraryLoadsहोना चाहिए false, क्योंकि यह सभी असुरक्षित कनेक्शन को बंद कर देता है, लेकिन अपवाद सूची HTTPS के बिना कुछ डोमेन से कनेक्शन की अनुमति देता है ।


7
इस जवाब के रूप में चिह्नित किया जाना चाहिए। परीक्षण किया और iOS 9 जीएम बीज पर काम कर रहा है ताकि एक विशिष्ट डोमेन को "आलसी" तरीके से बिना http का उपयोग किए और अपने ऐप को पूरी तरह से खोलने की अनुमति मिल सके।
डिस्कव्यू

2
मैं इसे अपनी info.plist में कैसे जोड़ूँ?
JMStudios.jrichardson

8
ठीक है, मैंने उस प्रविष्टि को अपनी जानकारी में जोड़ लिया। मैं अभी भी इस त्रुटि को प्राप्त कर रहा हूं - "ऐप ट्रांसपोर्ट सिक्योरिटी ने एक स्पष्ट HTTP (http: //) संसाधन लोड को अवरुद्ध कर दिया है क्योंकि यह असुरक्षित है। आपके ऐप की जानकारी के माध्यम से अस्थायी अपवादों को कॉन्फ़िगर किया जा सकता है। .plist फ़ाइल। "
केएमसी

2
@RomanShapovalov यदि आप एक आईपी पते का उपयोग करना चाहिए, IP पते के अंत में .xip.io जोड़ने का प्रयास करें और अपने NSExceptionDomains में xip.io जोड़ें। Xip.io देखें । मैं आईपी से सीधे जुड़ता हूं जब विकासशील (लेकिन रिलीज नहीं) और यह मेरे लिए बहुत अच्छा काम करता है।
tpankake

2
मेरे लिए काम नहीं कर रहा था जब तक मुझे एहसास नहीं हुआ कि मैंने इसे गलत जानकारी में डाल दिया है। मेरे परीक्षण परियोजना में मौजूद है। सुनिश्चित करें कि आपने इसे सही में डाला है!
चकी

144

यह एक त्वरित समाधान है (लेकिन अनुशंसित नहीं है)

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

जिसका अर्थ है ( Apple के दस्तावेज के अनुसार ):

NSAllowsArbitavorLoads
NSExceptionDomains शब्दकोश में सूचीबद्ध किसी भी डोमेन के लिए ऐप ट्रांसपोर्ट सिक्योरिटी को अक्षम करने के लिए इस्तेमाल किया जाने वाला बूलियन मान। सूचीबद्ध डोमेन उस डोमेन के लिए निर्दिष्ट सेटिंग्स का उपयोग करते हैं।

NO का डिफ़ॉल्ट मान सभी कनेक्शन के लिए डिफ़ॉल्ट ऐप ट्रांसपोर्ट सुरक्षा व्यवहार की आवश्यकता है।

मैं वास्तव में लिंक की सिफारिश करता हूं:

जो मुझे कारण और सभी निहितार्थों को समझने में मदद करते हैं।

नीचे दी गई XML (फ़ाइल Info.plist में):

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

सभी पृष्ठों के लिए मनमानी कॉल को अस्वीकार करें, लेकिन PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDEयह अनुमति देगा कि कनेक्शन HTTP प्रोटोकॉल का उपयोग करें।

ऊपर XML में आप जोड़ सकते हैं:

<key>NSIncludesSubdomains</key>
<true/>

यदि आप निर्दिष्ट पते के उप डोमेन के लिए असुरक्षित कनेक्शन की अनुमति देना चाहते हैं।

सबसे अच्छा तरीका यह है कि सभी मनमाने ढंग से लोड को रोकें (झूठे पर सेट करें) और अपवादों को जोड़ने के लिए केवल उन पतों की अनुमति दें जिन्हें हम जानते हैं कि वे ठीक हैं।

इच्छुक पाठकों के लिए

2018 अपडेट:

Apple इसे बंद करने की सिफारिश नहीं कर रहा है - सुरक्षा के संबंध में अधिक जानकारी के साथ 207 सत्र WWDC 2018 में अधिक जानकारी पाई जा सकती है

ऐतिहासिक कारणों और विकास के चरण के मूल जवाब को छोड़कर


1
NSAllowsArbitraryLoadsहोना चाहिएfalse
साउंड ब्लास्टर

@SoundBlaster किस मामले में और क्या आप नीचे वोट करने के लिए मेरे जवाब में गलत देखते हैं?
जूलियन क्राल

plist (NSAppTransportSecurity NSAllowsArbiteathLoads) में जोड़कर, सभी वेब सेवा एक वेब सेवा को छोड़कर एक वेब सेवा एक आंतरिक सेवा त्रुटि आईओएस 9 में आंतरिक सर्वर त्रुटि (500) को छोड़कर iOS8 में या बाद में ठीक काम कर रहा है
amit gupta

@ साउंडब्लस्टर ने एक बदलाव किया, अब आप पर आपत्ति नहीं होनी चाहिए :)
जूलियन क्राल

धन्यवाद, आप वास्तव में कैसे जोड़ते हैं <key>NSIncludesSubdomains</key> <true/>? क्या हर सेटिंग को घेरना पड़ता है <dict>? आप इस लानत फ़ाइल को कैसे संपादित करते हैं? स्वरूपण क्या है? : D धन्यवाद।
एजेंट ज़ेबरा

116

आप में से जो इस बारे में अधिक संदर्भ चाहते हैं कि यह क्यों हो रहा है, इसके अलावा इसे कैसे ठीक किया जाए, तो नीचे पढ़ें।

IOS 9 की शुरुआत के साथ, ऐप और वेब सेवाओं के बीच कनेक्शन की सुरक्षा को बेहतर बनाने के लिए, ऐप और उसकी वेब सेवा के बीच सुरक्षित कनेक्शन को अन्य प्रथाओं का पालन करना चाहिए । सबसे अच्छा व्यवहार व्यवहार ऐप परिवहन सुरक्षा द्वारा लागू किया जाता है:

  • आकस्मिक खुलासे को रोकें, और
  • एक डिफ़ॉल्ट व्यवहार प्रदान करें जो सुरक्षित हो।

जैसा कि App Transport Security Technote में बताया गया है , जब आपकी वेब सेवा के साथ संचार करते समय, App Transport Security में अब निम्नलिखित आवश्यकताएं और व्यवहार हैं:

  • सर्वर को कम से कम ट्रांसपोर्ट लेयर सिक्योरिटी (TLS) प्रोटोकॉल संस्करण 1.2 का समर्थन करना चाहिए।
  • कनेक्शन सिफर उन तक सीमित हैं जो आगे गोपनीयता प्रदान करते हैं (नीचे दिए गए सिफर की सूची देखें)।
  • प्रमाण पत्र पर SHA256 या बेहतर हस्ताक्षर हैश एल्गोरिथ्म का उपयोग करके हस्ताक्षर किया जाना चाहिए, जिसमें 2048 बिट या अधिक आरएसए कुंजी या 256 बिट या अधिक एलिप्टिक-कर्व (ईसीसी) कुंजी होगी।
  • अमान्य प्रमाणपत्रों का परिणाम एक कठिन विफलता और कोई कनेक्शन नहीं है।

दूसरे शब्दों में, आपके वेब सेवा अनुरोध को चाहिए: a।) HTTPS और b। का उपयोग करें) आगे गोपनीयता के साथ TLS v1.2 का उपयोग कर एन्क्रिप्ट किया जाए।

हालाँकि, जैसा कि अन्य पोस्ट में बताया गया है, आप Info.plistअपने ऐप के असुरक्षित डोमेन को निर्दिष्ट करके ऐप ट्रांसपोर्ट सिक्योरिटी के इस नए व्यवहार को ओवरराइड कर सकते हैं ।


ओवरराइड करने के लिए, आप जोड़ने की आवश्यकता होगी NSAppTransportSecurity> NSExceptionDomainsआपके लिए गुण शब्दकोश Info.plist। इसके बाद, आप अपनी वेब सेवा के डोमेन को NSExceptionDomainsशब्दकोश में जोड़ देंगे ।

उदाहरण के लिए, यदि मैं होस्ट www.yourwebservicehost.com पर एक वेब सेवा के लिए ऐप ट्रांसपोर्ट सिक्योरिटी व्यवहार को बायपास करना चाहता हूं, तो मैं निम्नलिखित कार्य करूंगा:

  1. Xcode में अपना ऐप खोलें।

  2. Info.plistप्रोजेक्ट नेविगेटर में फ़ाइल ढूंढें और "राइट-माउस" उस पर क्लिक करें और ओपन अस > सोर्स कोड मेनू विकल्प चुनें। प्रॉपर्टी लिस्ट फाइल राइट पेन में दिखाई देगी।

  3. मुख्य गुण शब्दकोश (पहले के तहत <dict>) के अंदर निम्नलिखित गुण ब्लॉक रखें ।


<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.example.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

यदि आपको अतिरिक्त डोमेन के लिए अपवाद प्रदान करने की आवश्यकता है तो आप नीचे एक और शब्दकोश संपत्ति जोड़ेंगे NSExceptionDomains

ऊपर उल्लिखित कुंजियों के बारे में अधिक जानने के लिए, यह पहले से ही उल्लेखित तकनीकी पढ़ें ।


1
यह मेरे 2 ऐप्स में काम करता है, लेकिन यह 3 पर काम नहीं कर रहा है। क्या किसी और ने उपरोक्त फिक्स का उपयोग करने और अभी भी एक ही त्रुटि संदेश प्राप्त करने की स्थिति का सामना किया है? (और हां मैंने अपने एपीआई डोमेन का उपयोग करने के लिए शब्दकोश अपडेट किया था, कोड में कोई नहीं)
हेलो बीपी

श्रेष्ठ ! Apple पुष्टि करता है कि यह समाधान
YannSteph

इसने TLS / HTTP / HTTPS संयोजनों के साथ सेवाओं के लिए कई अपवाद डोमेन के ./platforms/ios/<project>/<project>-Info.plistसाथ एक कॉर्डोबा / फोनगैप / आयोनिक ऐप संपादन फ़ाइल के लिए काम किया NSAllowsArbitraryLoads=falseNSAllowsArbitraryLoads=trueदिशा-निर्देशों का पालन करने और अनुमोदन के लिए सबमिट करने के लिए परीक्षण और त्रुटि के माध्यम से नियमों का निवारण करने के बाद शुरू में समायोजित, समायोजित किया गया। नोट config.xml <access origin=.../>स्टेटमेंट इस फ़ाइल को आंशिक रूप से पॉप्युलेट करते हैं, लेकिन वर्तमान में विवरण को सही करने के लिए डायरेक्ट एडिटिंग या XCode के माध्यम से समायोजन की आवश्यकता होती है।
jimmont

इसके अलावा <access origin="*"/>(config.xml में) सेट NSAllowsArbitraryLoads=true(कॉर्डोवा /
फोनगैप

क्यों NSExceptionAllowsInsecureHTTPLoadsसेट किया गया है true? आप एटीएस के उद्देश्य को घटाते हैं। इसके अलावा दुनिया में सबसे खतरनाक कोड देखें : गैर-ब्राउज़र सॉफ़्टवेयर में एसएसएल प्रमाणपत्रों को मान्य करना । आपके सॉफ़्टवेयर ने केवल सूची बनाई है।
3

67

मुझे सीधे तौर पर प्लास्ट का संपादन पसंद नहीं है। आप इसे जीयूआई का उपयोग करके आसानी से प्लिस्ट में जोड़ सकते हैं:

  • बाईं ओर नेविगेटर में Info.plist पर क्लिक करें।
  • अब मुख्य क्षेत्र में डेटा बदलें:

    • अंतिम पंक्ति में + जोड़ें
    • समूह का नाम दर्ज करें: ऐप ट्रांसपोर्ट सिक्योरिटी सेटिंग्स
    • समूह पर राइट क्लिक करें और चुनें Add Row
    • मनमाना अनुमति दें दर्ज करें
    • हां के दाईं ओर मान सेट करें

उदाहरण


स्पष्ट करने के लिए: यदि "अनुमति दें मध्यस्थता भार" हां है, और "अपवाद डोमेन" हैं, तो अनुमति वाले लोड को अपवाद डोमेन में प्रतिबंधित कर दिया जाता है। क्या वो सही है?

यदि मैं आवेदन जारी करना चाहता हूं तो क्या वह सुरक्षित तरीका है?
लामौर

नहीं , मनमाने लोड की अनुमति देकर, आपका ऐप किसी भी डोमेन से स्वतंत्र रूप से जुड़ सकता है। सुरक्षा के दृष्टिकोण से, आपको अप्रत्याशित नेटवर्क के उपयोग से बचने के लिए किस डोमेन / वेबसाइट से कनेक्ट होना चाहिए, इसे नियंत्रित और सीमित करना चाहिए।
रैप्टर

अधिकांश एप्लिकेशन केवल ज्ञात सर्वरों के लिए मार्ग रखते हैं। इसे डेवलपर द्वारा नियंत्रित किया जाता है। तो सुरक्षा के मुद्दे जाने जाते हैं।
विंसेंट

क्यों NSAllowsArbitraryLoadsसेट किया गया है YES? आप एटीएस के उद्देश्य को घटाते हैं। और देखें दुनिया में सबसे खतरनाक कोड : गैर-ब्राउज़र सॉफ़्टवेयर में एसएसएल प्रमाणपत्रों को मान्य करना । आपके सॉफ़्टवेयर ने केवल सूची बनाई है।
jww

25

Apple दस्तावेज़ 1

Apple दस्तावेज़ 2

इसके लिए दो समाधान हैं:

समाधान 1:

  1. में Info.plistफ़ाइल 'कुंजी के साथ एक शब्दकोश जोड़ने NSAppTransportSecurity'
  2. कुंजी के साथ शब्दकोश के अंदर एक और तत्व जोड़ें 'Allow Arbitrary Loads'

Plist संरचना नीचे दी गई छवि के अनुसार दिखाई देनी चाहिए।

समाधान 1

समाधान 2:

  1. में Info.plistफ़ाइल 'कुंजी के साथ एक शब्दकोश जोड़ने NSAppTransportSecurity'
  2. कुंजी ' NSExceptionDomains' के साथ शब्दकोश के अंदर एक और तत्व जोड़ें
  3. 'MyDomainName.com'प्रकार NS NS के साथ तत्व जोड़ें
  4. NSIncludesSubdomainsप्रकार Booleanऔर मान के रूप में सेट कुंजी के साथ तत्व जोड़ेंYES
  5. कुंजी के साथ तत्व जोड़ें 'NSTemporaryExceptionAllowsInsecureHTTPLoadsप्रकार Booleanऔर मान के रूप में सेट YES

Plist संरचना नीचे दी गई छवि के अनुसार दिखाई देनी चाहिए।

समाधान २

समाधान 2 को प्राथमिकता दी जाती है क्योंकि यह केवल चयनित डोमेन की अनुमति देता है जबकि समाधान 1 सभी असुरक्षित HTTP कनेक्शन की अनुमति देता है।


क्यों NSAllowsArbitraryLoadsसेट किया गया है YES? आप एटीएस के उद्देश्य को घटाते हैं। इसके अलावा दुनिया में सबसे खतरनाक कोड देखें : गैर-ब्राउज़र सॉफ़्टवेयर में एसएसएल प्रमाणपत्रों को मान्य करना । आपके सॉफ़्टवेयर ने केवल सूची बनाई है।
jww

20

परिवहन सुरक्षा iOS 9.0 या बाद के संस्करण पर उपलब्ध है। आपके ऐप्लिकेशन के अंदर WS को कॉल करने का प्रयास करते समय आपको यह चेतावनी हो सकती है:

एप्लिकेशन ट्रांसपोर्ट सिक्योरिटी ने एक स्पष्ट HTTP (http: //) संसाधन लोड को अवरुद्ध कर दिया है क्योंकि यह असुरक्षित है। अस्थायी अपवादों को आपके ऐप की Info.plist फ़ाइल के माध्यम से कॉन्फ़िगर किया जा सकता है।

निम्नलिखित को अपने Info.plist में जोड़ने से ATS निष्क्रिय हो जाएगा:

<key>NSAppTransportSecurity</key>
<dict>
     <key>NSAllowsArbitraryLoads</key><true/>
</dict>

1
NSAllowsArbitwindLoads गलत होना चाहिए, अगर यह सच है कि यह सभी असुरक्षित कनेक्शन की अनुमति देता है
Thiago Arreguy

plist में जोड़कर सभी वेब सेवा आईओएस 9 में एक वेब सेवा एक वेब सेवा वापसी आंतरिक सर्वर त्रुटि (500) को छोड़कर काम कर ठीक लेकिन iOS8 में ठीक काम कर रहा या बाद में
अमित गुप्ता

1
स्टोर पर स्वीकार किए जाते हैं?
व्रषभ इरडे

बहुत बुरी सलाह; दुनिया में सबसे खतरनाक कोड देखें : गैर-ब्राउज़र सॉफ्टवेयर में एसएसएल प्रमाणपत्रों को मान्य करना । इस प्रश्न को देखते हुए कि क्या चीजों को करने के लिए अनुशंसित तरीके से भरा हुआ है, "मुझे भी" इस तरह के उत्तर की आवश्यकता नहीं है।
jww

15

विकास का उदाहरण

यहां एक प्लिस्ट का एक स्क्रीनशॉट है जो एटीएस को बरकरार रखता है (= सुरक्षित), लेकिन अनुमति देता है कि एचटीटीपीएस के बजाय एचटीटीपी के माध्यम से लोकलहोस्ट के लिए कनेक्शन बनाया जा सकता है । यह Xcode 7.1.1 में काम करता है।

यहां छवि विवरण दर्ज करें


क्या प्रतिक्रिया-मूल में HTTPS के उपयोग से स्थानीयहोस्ट को सुरक्षित बनाने का कोई तरीका है, ताकि हमें डिफ़ॉल्ट NSExceptionAllowsInsecureHTTPLoads - YESकॉन्फ़िगरेशन का उपयोग न करना पड़े ?
दूधसरक

13

अपने Info.plist पर जाएं

  1. खाली जगह पर राइट क्लिक करें और ऐड रो पर क्लिक करें
  2. इसके अंतर्गत मुख्य नाम NSAppTransportSecurity लिखें
  3. अपवाद डोमेन का चयन करें, इसमें एक नया आइटम जोड़ें
  4. अपना डोमेन नाम लिखें जिसे एक्सेस करने की आवश्यकता है
  5. स्ट्रिंग से शब्दकोश में डोमेन प्रकार बदलें, एक नया आइटम जोड़ें
  6. NSTemporaryExceptionAllowsInsecureHTTPLoads, जो एक सच्चे मूल्य के साथ एक बूलियन होगा। इसे सही ढंग से पालन करने के लिए चित्र को देखें

1
क्यों NSAllowsArbitraryLoadsसेट किया गया है true? आप एटीएस के उद्देश्य को घटाते हैं। इसके अलावा दुनिया में सबसे खतरनाक कोड देखें : गैर-ब्राउज़र सॉफ़्टवेयर में एसएसएल प्रमाणपत्रों को मान्य करना । आपके सॉफ़्टवेयर ने केवल सूची बनाई है।
jww

13

Apple के अनुसार, आम तौर पर एटीएस को अक्षम करने से ऐप अस्वीकृति हो जाएगी, जब तक कि आपके पास ऐसा करने का एक अच्छा कारण नहीं है। फिर भी, आपको उन डोमेन के लिए अपवाद जोड़ना चाहिए जिन्हें आप सुरक्षित रूप से एक्सेस कर सकते हैं।

Apple के पास एक उत्कृष्ट उपकरण है जो आपको बताता है कि कौन सी सेटिंग्स का उपयोग करना है: टर्मिनल में, दर्ज करें

/usr/bin/nscurl --ats-diagnostics --verbose https://www.example.com/whatever

और nscurl यह जाँच करेगा कि यह अनुरोध विफल है या नहीं, और फिर कई प्रकार की सेटिंग्स आज़माएँ और आपको बताएं कि वास्तव में कौन-सा पास है, और क्या करना है। उदाहरण के लिए, मेरे द्वारा देखे जाने वाले कुछ तृतीय-पक्ष URL के लिए, इस आदेश ने मुझे बताया कि यह शब्दकोश पास है:

{
    NSExceptionDomains = {
        "www.example.com" = {
            NSExceptionRequiresForwardSecrecy = false;
        };
    };
}

अपने स्वयं के साइटों और तृतीय-पक्ष साइटों के बीच अंतर करने के लिए जो आपके नियंत्रण से बाहर हैं, उदाहरण के लिए, कुंजी NSThirdPartyExceptionRequiresForwardSecrecy।


1
वास्तव में आवेदन के साथ परीक्षण करने से पहले जांच करने के लिए इसका महान उपकरण। समय बचाओ। लेकिन इस कमांड के आउट पुट को समझने के लिए पढ़ने के लिए कोई भी संसाधन।
बांधिथ

1
दिलचस्प उपकरण। मेरे मामले में यह चीजों पर काबू पा लेता है। इसमें तीन कुंजी शामिल हैंNSExceptionAllowsInsecureHTTPLoads = true; , लेकिन यह पता चला है कि किसी की जरूरत नहीं है।
क्रिस प्रिंस

11

इस तकनीक में बताए अनुसार क्या सेटिंग्स का उपयोग करने के लिए स्वचालित रूप से प्रदर्शन किया जा सकता है, यह पता लगाना :

/usr/bin/nscurl --ats-diagnostics --verbose https://your-domain.com

आपको जाहिरा तौर पर इसके लिए OS X 10.11 (El Capitan) की जरूरत है।
इकोटैक्स

10

ध्यान दें: आपके प्लास्ट में अपवाद डोमेन लोअर-केस में होना चाहिए।

उदाहरण: आपने सेटिंग-> साझाकरण के तहत अपनी मशीन का नाम "MyAwesomeMacbook" रखा है; आपका सर्वर (परीक्षण प्रयोजनों के लिए) MyAwesomeMacbook.local: 3000 पर चल रहा है, और आपके ऐप को http: //MyAwesomeMacbook.local: 3000 / फ़ाइलों के लिए एक अनुरोध भेजने की आवश्यकता है ..., आपके आपको "myawesomemacbook" निर्दिष्ट करना होगा। स्थानीय "अपवाद डोमेन के रूप में।

-

आपकी जानकारी .plist में शामिल होगी ...

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>myawesomemacbook.local</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSExceptionAllowsInsecureHTTPLoads</key>
      <true/>
    </dict>
  </dict>
</dict>

9

उपयोग:

बेहतर समझने के लिए स्क्रीनशॉट स्क्रीनशॉट

एक नई आइटम, NSAppTransportSecurity टाइप करें शब्दकोश के साथ plist फ़ाइल में , फिर उप आइटम NSAllowsArbiteathLoads टाइप Boolean के शब्दकोश में जोड़ें , और बूल मान YES सेट करें । यह मेरे लिए काम करता है।


1
NSAllowsArbitwindLoads गलत होना चाहिए, अगर यह सच है कि यह सभी असुरक्षित कनेक्शन की अनुमति देता है
Thiago Arreguy

आईओएस 9 में एक वेब सेवा एक आंतरिक सेवा वापसी आंतरिक सर्वर त्रुटि (500) को छोड़कर सभी वेब सेवा में ठीक काम करने से जोड़कर लेकिन iOS8 में या बाद में ठीक काम कर रहे @ThiagoArreguy
amit gupta

बहुत बुरी सलाह; दुनिया में सबसे खतरनाक कोड देखें : गैर-ब्राउज़र सॉफ्टवेयर में एसएसएल प्रमाणपत्रों को मान्य करना । इस सवाल को देखते हुए कि क्या चीजों को करने के लिए अनुशंसित तरीके से भरा है, "मुझे भी" इस तरह के उत्तर की आवश्यकता नहीं है।
3

मुझे पता है कि यह एक बुरी सलाह है, लेकिन यह केवल विकास मोड में समय के लिए एक समाधान है। Apple ने हमें लचीलापन प्रदान किया है, अगर इसका इतना बुरा है, तो वे इसकी अनुमति नहीं देंगे।
तेजिंदर

9

2015-09-25 (2015-09-18 पर Xcode अपडेट के बाद):

मैंने एक गैर-आलसी विधि का उपयोग किया, लेकिन यह काम नहीं किया। अनुगमन मेरे प्रयास हैं।

प्रथम,

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.xxx.yyy.zzz</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

और दूसरा,

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.xxx.yyy.zzz</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

अंत में, मैंने आलसी विधि का उपयोग किया:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

यह थोड़ा असुरक्षित हो सकता है, लेकिन मैं अन्य समाधान नहीं खोज सका।


क्यों NSAllowsArbitraryLoadsसेट किया गया है true? आप एटीएस के उद्देश्य को घटाते हैं। इसके अलावा दुनिया में सबसे खतरनाक कोड देखें : गैर-ब्राउज़र सॉफ़्टवेयर में एसएसएल प्रमाणपत्रों को मान्य करना । आपके सॉफ़्टवेयर ने केवल सूची बनाई है।
jww

9

स्विफ्ट 4 और xocde 10 में NSAllowsArbiteathLoads को बदलने के लिए आर्बिटर्ड लोड्स को अनुमति दें। तो यह इस तरह दिखने वाला है:

<key>App Transport Security Settings</key>
<dict>
     <key>Allow Arbitrary Loads</key><true/>
</dict>

6

यह उल्लेख के लायक हो सकता है कि वहां कैसे पहुंचे ...

Info.plist Main.storyboard या viewController.swift के नीचे की फाइलों में से एक है।

जब आप पहली बार उस पर क्लिक करते हैं, तो यह आमतौर पर एक तालिका प्रारूप में होता है, इसलिए फ़ाइल को राइट क्लिक करें और 'सोर्स कोड के रूप में खोलें' और फिर अंत में नीचे दिए गए कोड को जोड़ें, अर्थात:

 <key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict>

ऊपर दिए गए कोड को कॉपी पेस्ट करें

 "</dict>
</plist>"

जो अंत में है।


क्यों NSAllowsArbitraryLoadsसेट किया गया है true? आप एटीएस के उद्देश्य को घटाते हैं। इसके अलावा दुनिया में सबसे खतरनाक कोड देखें : गैर-ब्राउज़र सॉफ़्टवेयर में एसएसएल प्रमाणपत्रों को मान्य करना । आपके सॉफ़्टवेयर ने केवल सूची बनाई है।
jww

5

Xcode 7.1 के लिए अद्यतन, समस्या का सामना कर रहा है 27.10.15:

Info.plist में नया मूल्य "ऐप ट्रांसपोर्ट सिक्योरिटी सेटिंग्स" है। वहाँ से, इस शब्दकोश में शामिल होना चाहिए:

  • मनमाना लोड = YES की अनुमति दें
  • अपवाद डोमेन (यहां अपना http डोमेन डालें)

4

उन लोगों के लिए जो यहां आने का कारण जानने की कोशिश कर रहे हैं कि उनका WKWebView हमेशा सफेद होता है और कुछ भी नहीं लोड करता है (बिल्कुल यहाँ वर्णित है कि मुझे WKWebView को कैसे तेज और मैकओएस ऐप में काम करना है ):

यदि ऊपर का सभी रॉकेट विज्ञान आपके लिए काम नहीं करता है तो स्पष्ट जांच करें: सैंडबॉक्स सेटिंग्स

सैंडबॉक्स सेटिंग]

स्विफ्ट और कोको के लिए नया होने के नाते, लेकिन प्रोग्रामिंग में काफी अनुभवी मैंने इस समाधान को खोजने के लिए लगभग 20 घंटे बिताए हैं। दर्जनों हिपस्टर-आईओएस-ट्यूटोरियल और न ही ऐप्पल कीनोट्स में से कोई भी - इस छोटे से चेकबॉक्स का उल्लेख नहीं करता है।


हे भगवान, बहुत बहुत धन्यवाद! आपने मुझे वही 20 घंटे की खोज से बचाया!
ब्रेख्त माचिएल्स

2
लक्ष्य की क्षमताओं अनुभाग में उस अनुभाग (Xcode 9.4.1) नहीं देख
शिम

3

डिफ़ॉल्ट रूप से, iOS केवल HTTPS API की अनुमति देता है। चूंकि HTTP सुरक्षित नहीं है, इसलिए आपको ऐप ट्रांसपोर्ट सुरक्षा को अक्षम करना होगा। एटीएस को निष्क्रिय करने के दो तरीके हैं: -

1. प्रोजेक्ट info.plist में स्रोत कोड जोड़ना और रूट टैग में निम्नलिखित कोड जोड़ें।

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

2. परियोजना की जानकारी का उपयोग करना।

बाएं फलक पर प्रोजेक्ट पर प्रोजेक्ट पर क्लिक करें, प्रोजेक्ट को लक्ष्य के रूप में चुनें और जानकारी टैब चुनें। आपको निम्नलिखित संरचना में शब्दकोश जोड़ना होगा।

यहां छवि विवरण दर्ज करें



1

NSExceptionDomainsलक्ष्य साइट के कारण jsबाहरी डोमेन से संसाधनों (जैसे फ़ाइलों) को लोड करने के कारण एक साथ प्रभाव का उपयोग नहीं किया जा सकता है http। इन बाहरी डोमेन को भी जोड़कर इसे हल किया जा सकता है NSExceptionDomains

यह देखने के लिए कि कौन से संसाधन लोड नहीं किए जा सकते, दूरस्थ डिबगिंग का उपयोग करने का प्रयास करें। यहां एक ट्यूटोरियल दिया गया है: http://geeklearning.io/apache-cordova-and-remote-debugging-n-hi/


0

कॉर्डोवा के लिए, यदि आप इसे अपने ios.json में जोड़ना चाहते हैं, तो निम्न कार्य करें:

"NSAppTransportSecurity": [
   {
      "xml": "<dict><key>NSAllowsArbitraryLoads</key><true /></dict>"
   }
]

और यह अंदर होना चाहिए:

"*-Info.plist": {
   "parents": {
   }
}

Config.xml में बस <पहुंच मूल = "*" /> काम नहीं किया। यह सुनिश्चित नहीं है कि दोनों आवश्यक हैं, लेकिन ios.json समाधान ने मेरे लिए सौदा सील कर दिया।
zeusstl

क्यों NSAllowsArbitraryLoadsसेट किया गया है true? आप एटीएस के उद्देश्य को घटाते हैं। इसके अलावा दुनिया में सबसे खतरनाक कोड देखें : गैर-ब्राउज़र सॉफ़्टवेयर में एसएसएल प्रमाणपत्रों को मान्य करना । आपके सॉफ़्टवेयर ने केवल सूची बनाई है।
jww

-1

जैसा कि कई ने नोट किया है, यह एक फीचर इश्यू है जो iOS 9.0 के साथ आता है। उन्होंने ऐप ट्रांसपोर्ट सिक्योरिटी नामक एक चीज़ को जोड़ा है, और जब मैंने अपने ऐप्स को तोड़ दिया तो मैं भी नाराज़ था।

आप अपनी .plist फ़ाइल में NSAppTransportSecurity डिक्शनरी के तहत YES के लिए NSAllowsArbiteathLoads कुंजी के साथ इसे बंद कर सकते हैं, लेकिन अंततः आपको HTTPS बनाने के लिए अपने URL बनाने वाले कोड को फिर से लिखना होगा: // उपसर्ग।

Apple ने iOS 9.0 में NSUrlConnection वर्ग को फिर से लिखा है। आप NSURLConnection में इसके बारे में पढ़ सकते हैं ।

ठीक है, आपको सही समाधान को लागू करने का समय मिलने तक iOS 9.0 से बाहर होना पड़ सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.