ฉันจะเพิ่ม NSAppTransportSecurity ลงในไฟล์ info.plist ของฉันได้อย่างไร


124

https://developer.apple.com/videos/wwdc/2015/?id=711 @ 5: 55

ดูเหมือนว่าจะเพิ่มสิ่งนี้ใน info.plist ไม่ได้ ไม่มีค่ามัน ฉันใช้ XCode เวอร์ชัน 7.0 เบต้า (7A121l) และกำลังทดสอบบน iOS9

เนื่องจากฉันไม่สามารถระบุได้ว่าต้องการ URL ใดเป็นพิเศษตามที่เห็นในวิดีโอฉันจึงได้รับ "App Transport Security ได้บล็อกการโหลดทรัพยากร HTTP (http: //) ที่ชัดเจนเนื่องจากไม่ปลอดภัยคุณสามารถกำหนดค่าข้อยกเว้นชั่วคราวผ่านทางแอปของคุณได้ ข้อผิดพลาดไฟล์ Info.plist "

อย่างไรก็ตามดูเหมือนว่าฉันจะไม่สามารถกำหนดค่าได้ ความคิดใด ๆ ?


คุณไม่มีคำถามอีกต่อไปแล้วคุณควรตอบคำถามของคุณเองก่อนแล้วจึงยอมรับหลังจากเวลาที่เหมาะสมล่าช้า
Norman H

ชื่อโดเมนคืออะไร? นี่คือ url ฐานเซิร์ฟเวอร์หรืออื่น ๆ ? และจะหาชื่อโดเมนแอปของฉันได้ที่ไหน
นิ

ชื่อโดเมนเป็นหนึ่งในคำที่ใช้บ่อยที่สุด นี่คือสิ่งที่ซื้อแล้วหลังจากโฮสต์คุณสามารถใช้เป็น URL พื้นฐานของเซิร์ฟเวอร์ที่คุณใช้สำหรับ API ไม่มีอะไรที่เหมือนกับชื่อโดเมนของแอป ดังนั้นคุณสามารถใช้ชื่อโดเมนเป็นชื่อที่ใช้เขียน API
Ashish

คำตอบ:


132

ลองด้วยสิ่งนี้ - ใช้ได้ผลสำหรับฉันใน Xcode-beta 4 7.0

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

อีกหนึ่งทางเลือกหากคุณต้องการปิดใช้งาน ATS คุณสามารถใช้สิ่งนี้:

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

แต่นี่ไม่แนะนำเลย เซิร์ฟเวอร์ควรมีใบรับรอง SSL และไม่มีการรั่วไหลของความเป็นส่วนตัว


ฉันมี XCode 7.2 (7C68) และฉันได้แก้ไข (โดยปิดใช้งาน ATS ทั้งหมด) info.plist ของโครงการทดสอบของฉัน แต่มันไม่ทำงาน เบาะแสใด ๆ ?
Sanandrea

โดยทั่วไปมันใช้งานได้ ... คุณสามารถวางรหัสของคุณที่นี่แล้วเราจะเห็น
Ashish

และถ้าคุณมี domanis สองตัวขึ้นไปคุณต้องเพิ่ม<key>NSAllowsArbitraryLoads</key> <true/><key>NSExceptionDomains</key> มิฉะนั้นสำหรับฉันมันใช้ไม่ได้กับรุ่นที่วางจำหน่ายด้วยเหตุผลบางประการ
P. Lorand

90

คุณต้องเพิ่มคีย์ NSAllowsArbitraryLoads เป็น YES ในพจนานุกรม NSAppTransportSecurity ในไฟล์ info.plist ของคุณ

ตัวอย่างเช่น,

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

ใส่คำอธิบายภาพที่นี่


1
นี่เป็นวิธีแก้ปัญหาชั่วคราว ปัญหาที่แท้จริงคือความตายด้วยคำตอบของ @ Ashish
judepereira

45

นั่นไม่ได้ผลสำหรับฉัน แต่นี่เป็นเคล็ดลับ:

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

ฉันคิดว่าคุณหมายถึง<true/>แทน<YES/>
Clifton Labrum

1
จากมุมมองด้านความปลอดภัยนี่เป็นวิธีที่แท้จริงวิธีที่จะไม่ทำเพราะไม่มีใครเคยตรวจสอบโค้ดส่วนนี้และอัปเดตเป็นโดเมนที่ระบุอย่างถูกต้อง
igraczech

1
นี่ไม่ใช่วิธีปฏิบัติที่ดี แต่เราควรอนุญาตโดเมนเฉพาะ
Ashish

1
สำหรับมือใหม่อื่น ๆ เช่นฉัน: อย่าลืมวางไว้ในตำแหน่งที่ถูกต้อง (ในตอนท้ายล้อมรอบด้วยที่มีอยู่</dict>และ</plist>แท็ก:
Pwdr



4

อัปเดตคำตอบ (หลัง wwdc 2016):

IOS apps will require secure HTTPS connections by the end of 2016

App Transport Security หรือ ATS เป็นคุณลักษณะที่ Apple เปิดตัวใน iOS 9 เมื่อเปิดใช้งาน ATS แอปจะบังคับให้แอปเชื่อมต่อกับบริการเว็บผ่านการเชื่อมต่อ HTTPS แทนที่จะเป็น HTTP ที่ไม่ปลอดภัย

อย่างไรก็ตามนักพัฒนายังคงสามารถปิด ATS และอนุญาตให้แอปของตนส่งข้อมูลผ่านการเชื่อมต่อ HTTP ตามที่กล่าวไว้ในคำตอบข้างต้น ในช่วงปลายปี 2559 Apple จะบังคับใช้ ATSสำหรับนักพัฒนาทุกคนที่หวังจะส่งแอพของตนไปยัง App Store ลิงค์


หลังจากสิ้นปีนี้แอปใหม่หรือแอปอัปเดตที่ไม่ใช้ https จะถูกปฏิเสธ แล้วแอพที่มีอยู่กับบายพาสล่ะ? (จำเป็นต้องมีการปรับปรุงหรือไม่)
Paraneetharan Saravanaperumal

2
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>com</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>net</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
        <key>org</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

ซึ่งจะทำให้สามารถเชื่อมต่อกับ. com .net .org


ขอบคุณสำหรับตัวอย่างที่แสดงวิธีการเพิ่มหลายโดเมน
AtheistP3ace

2
<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>uservoice.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
        </dict>
    </dict>

1

หากต้องการอธิบายเพิ่มเติมเกี่ยวกับคำตอบของ ParaSara: การรักษาความปลอดภัยของ App Transport จะกลายเป็นข้อบังคับและการพยายามปิดอาจทำให้แอปของคุณถูกปฏิเสธ

ในฐานะนักพัฒนาคุณสามารถปิดการรักษาความปลอดภัยของ App Transport ได้หากรหัสเครือข่ายของคุณใช้ไม่ได้และคุณต้องการดำเนินการพัฒนาอื่น ๆ ต่อไปก่อนที่จะแก้ไขปัญหาใด ๆ พูดเป็นทีมห้าคนสี่คนสามารถทำงานอย่างอื่นต่อไปได้ในขณะที่คนหนึ่งแก้ไขปัญหาทั้งหมด คุณยังสามารถปิดการรักษาความปลอดภัย App Transport เป็นเครื่องมือในการดีบักได้หากคุณมีปัญหาเกี่ยวกับเครือข่ายและต้องการตรวจสอบว่าเกิดจากความปลอดภัยของ App Transport หรือไม่ ทันทีที่คุณรู้คุณควรเปิดอีกครั้งทันที

วิธีแก้ปัญหาที่คุณต้องใช้ในอนาคตคืออย่าใช้ http เลยเว้นแต่คุณจะใช้เซิร์ฟเวอร์ของบุคคลที่สามที่ไม่รองรับ https หากเซิร์ฟเวอร์ของคุณไม่รองรับ https Apple จะมีปัญหากับสิ่งนั้น แม้จะใช้เซิร์ฟเวอร์ของบุคคลที่สามฉันก็ไม่คิดว่า Apple จะยอมรับมัน

เช่นเดียวกับการตรวจสอบความปลอดภัยของเซิร์ฟเวอร์ต่างๆ ในบางจุด Apple จะยอมรับเฉพาะข้อยกเว้นที่สมเหตุสมผลเท่านั้น

แต่ส่วนใหญ่ให้พิจารณาสิ่งนี้: คุณกำลังทำร้ายความเป็นส่วนตัวของลูกค้าของคุณ นั่นเป็นสิ่งที่ไม่สำคัญในหนังสือของฉัน อย่าทำอย่างนั้น แก้ไขโค้ดของคุณอย่าขออนุญาตเรียกใช้โค้ดที่ไม่ปลอดภัย



1

ในบรรทัดคำสั่ง mac shellใช้คำสั่งต่อไปนี้:

plutil -insert NSAppTransportSecurity -xml "<array><string> hidden </string></array>" [location of your xcode project]/Info.plist 

คำสั่งจะเพิ่มค่าที่จำเป็นทั้งหมดลงในไฟล์ plist ของคุณ


1

XCODE 8, Swift 3: คุณต้องเพิ่มแถว: **

"การตั้งค่าความปลอดภัยการขนส่งแอป"

** ใน info.plist ข้อมูลภายในรายการทรัพย์สิน


0

Xcode 9.2, Swift 4 ใช้งานได้สำหรับฉัน

<key>App Transport Security Settings</key>
<dict>
    <key>Allow Arbitrary Loads</key>
    <true/>
</dict>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.