Làm cách nào tôi có thể thêm NSAppTransportSecurity vào tệp info.plist của mình?


124

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

Tôi dường như không thể thêm nó vào thông tin của mình. Không có giá trị nó. Tôi đang chạy XCode Phiên bản 7.0 beta (7A121l) và đang thử nghiệm trên iOS9.

Vì tôi không thể khai báo cụ thể URL nào tôi muốn thấy trong video, tôi tiếp tục nhận được "App Transport Security đã chặn tải tài nguyên HTTP (http: //) rõ ràng vì nó không an toàn. Ngoại lệ tạm thời có thể được định cấu hình qua ứng dụng của bạn Tệp Info.plist "lỗi.

Tuy nhiên, tôi dường như không thể cấu hình nó. Có ý kiến ​​gì không?


Bạn thực sự không có câu hỏi nào nữa, bạn chỉ nên tiếp tục và trả lời câu hỏi của chính mình và sau đó chấp nhận sau thời gian trì hoãn thích hợp.
Norman H

Tên miên la gi ? Đây có phải là một url cơ sở máy chủ hoặc bất kỳ khác? và tìm tên miền ứng dụng của tôi ở đâu?
Nik

Tên miền là một trong những thuật ngữ phổ biến nhất được sử dụng. Vâng, đây là cái được mua và sau khi lưu trữ, bạn có thể sử dụng nó làm url cơ sở máy chủ mà bạn sử dụng cho API. Không có gì giống như tên miền ứng dụng. Vì vậy, bạn có thể sử dụng tên miền làm tên miền nơi API được viết.
Ashish

Câu trả lời:


131

thử với điều này --- đã làm việc với tôi trong 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>

Ngoài ra một tùy chọn khác, nếu bạn muốn tắt ATS, bạn có thể sử dụng tùy chọn này:

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

Nhưng điều này không được khuyến khích ở tất cả. Máy chủ phải có chứng chỉ SSL và do đó không có rò rỉ quyền riêng tư.


Tôi có XCode 7.2 (7C68) và tôi đã sửa đổi (bằng cách vô hiệu hóa hoàn toàn ATS) thông tin.plist của dự án thử nghiệm của tôi. Nhưng nó không hoạt động. Có manh mối nào không?
Sanandrea

nói chung là nó hoạt động ... bạn có thể dán mã ur ở đây và sau đó chúng ta có thể thấy
Ashish

Và ngoài ra, nếu bạn có hai hoặc nhiều domanis, bạn phải thêm <key>NSAllowsArbitraryLoads</key> <true/><key>NSExceptionDomains</key> Nếu không, đối với tôi, nó không hoạt động cho phiên bản phát hành vì một số lý do
P.Lorand

90

Bạn phải thêm khóa NSAllowsArbitraryLoads vào CÓ trong từ điển NSAppTransportSecurity trong tệp info.plist của bạn.

Ví dụ,

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

nhập mô tả hình ảnh ở đây


1
Đây là một cách giải quyết. Vấn đề thực sự là cái chết với câu trả lời của @ Ashish
judepereira

45

Điều đó không hiệu quả với tôi, nhưng điều này đã tạo ra mánh khóe:

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

Tôi nghĩ bạn có ý <true/>thay vì<YES/>
Clifton Labrum

1
Từ quan điểm bảo mật, đây chính xác là một cách, làm thế nào KHÔNG làm điều đó, bởi vì không ai sẽ xem lại phần mã này và cập nhật nó vào các miền được chỉ định đúng.
igrac817

1
Đây không phải là một thực hành tốt. Thay vào đó chúng ta nên cho phép các tên miền cụ thể.
Ashish

1
Đối với những người mới khác như tôi: Đảm bảo đặt nó ở vị trí chính xác (ở cuối, được bao quanh bởi các thẻ hiện có </dict></plist>thẻ:
Pwdr

21

Chỉ cần làm rõ ... Bạn nên luôn luôn sử dụng httpS

Nhưng bạn có thể bỏ qua nó thêm ngoại lệ:

nhập mô tả hình ảnh ở đây


9

Xcode 8.2, iOS 10

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

4

Cập nhật câu trả lời (sau wwdc 2016):

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

App Transport Security, hay ATS, là một tính năng mà Apple giới thiệu trong iOS 9. Khi ATS được bật, nó buộc một ứng dụng kết nối với các dịch vụ web qua kết nối HTTPS thay vì HTTP không bảo mật.

Tuy nhiên, các nhà phát triển vẫn có thể tắt ATS và cho phép ứng dụng của họ gửi dữ liệu qua kết nối HTTP như được đề cập trong các câu trả lời ở trên. Vào cuối năm 2016, Apple sẽ bắt buộc ATS cho tất cả các nhà phát triển muốn gửi ứng dụng của họ lên App Store. liên kết


sau khi kết thúc năm nay, ứng dụng mới hoặc ứng dụng cập nhật mà không sử dụng https sẽ bị từ chối. Những gì về ứng dụng hiện có với bypass? (chúng ta cần cập nhật lực lượng?)
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>

Điều này sẽ cho phép kết nối với .com .net .org


Cảm ơn bạn về một ví dụ cho thấy cách thêm nhiều tên miền.
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

Để giải thích thêm một chút về câu trả lời của ParaSara: Bảo mật ứng dụng vận tải sẽ trở thành bắt buộc và cố gắng tắt nó có thể khiến ứng dụng của bạn bị từ chối.

Là nhà phát triển, bạn có thể tắt bảo mật App Transport nếu mã mạng của bạn không hoạt động với nó và bạn muốn tiếp tục phát triển khác trước khi khắc phục bất kỳ vấn đề nào. Nói trong một nhóm năm, bốn người có thể tiếp tục làm việc với những thứ khác trong khi một người sửa tất cả các vấn đề. Bạn cũng có thể tắt bảo mật App Transport làm công cụ gỡ lỗi nếu bạn gặp sự cố về mạng và bạn muốn kiểm tra xem chúng có phải do bảo mật của App Transport không. Ngay khi bạn biết bạn nên bật lại ngay lập tức.

Giải pháp mà bạn phải sử dụng trong tương lai là không sử dụng http, trừ khi bạn sử dụng máy chủ của bên thứ ba không hỗ trợ https. Nếu máy chủ của bạn không hỗ trợ https, Apple sẽ gặp vấn đề với điều đó. Ngay cả với các máy chủ của bên thứ ba, tôi sẽ không đặt cược rằng Apple chấp nhận nó.

Tương tự với các kiểm tra khác nhau cho bảo mật máy chủ. Tại một số điểm, Apple sẽ chỉ chấp nhận các ngoại lệ chính đáng.

Nhưng chủ yếu, hãy xem xét điều này: Bạn đang gây nguy hiểm cho sự riêng tư của khách hàng. Đó là một điều không lớn trong cuốn sách của tôi. Đừng làm vậy. Sửa mã của bạn, đừng xin phép chạy mã không an toàn.



1

Trong dòng lệnh mac shell , sử dụng lệnh sau:

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

Lệnh sẽ thêm tất cả các giá trị cần thiết vào tệp plist của bạn.


1

XCODE 8, Swift 3: Bạn cần thêm một hàng: **

"Cài đặt bảo mật vận chuyển ứng dụng"

** trong thông tin.plist bên trong thông tin Danh sách tài sản.


0

Xcode 9.2, Swift 4, điều này làm việc cho tôi.

<key>App Transport Security Settings</key>
<dict>
    <key>Allow Arbitrary Loads</key>
    <true/>
</dict>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.