저는 Apple 장치용 자동화된 VPN 구성 포털인 Python으로 애플리케이션을 작성했습니다.
나를 짜증나게 하는 것은 테스트 서버와 프로덕션 서버 사이의 동작 차이입니다. 전자는 을 사용하고 Apache
후자는 를 사용합니다 lighthttpd
.
lighhttpd
예를 들어 파일이 .mobileconfig
열리고 "실행" 되면 Apache에서는 발생하지 않는 SysPrefs가 자동으로 열립니다.
나는 lighhtpd
right 의 정의가 훨씬 느슨하다는 것을 알았습니다. 그러나 현재 문제는 Safari가 파일을 올바르게 Content-Type
로드하고 "자동 실행" 하는 반면 ..mobileconfig
lighthttpd
Apache
나를 더욱 짜증나게 하는 것은 두 서버 모두에서 해당 콘텐츠가 mime.type
다음과 같이 올바르게 정의되어 있다는 것입니다.
lighthttpd.conf
$HTTP["url"] =~ "\.mobileconfig$" {
setenv.add-response-header = ( "Content-Disposition" => "attachment" )
mimetype.assign = (".mobileconfig" => "application/x-apple-aspen-config",
"" => "application/octet-stream")
}
Apache에서와 마찬가지로:
dovpn.conf(가상 호스트)
AddType application/x-apple-aspen-config .mobileconfig
차이점에 대한 첫 번째 단서는 실제로 add-response-header
의 지침 에서 비롯된 것 같습니다 lighthttpd
.
생성된 HTML에는 다음이 있습니다.
a download="profile.mobileconfig" href="../upload/8bd16b26-1473-4994-9803-8268a372cd0d.mobileconfig" type="application/octet-stream">Download automatic profile/a
Javascript를 통해 자동으로 파일을 다운로드했습니다.
//If in Safari - download via virtual link click
if (window.downloadFile.isSafari) {
//Creating new link node.
var link = document.createElement('a');
link.href = sUrl;
if (link.download !== undefined) {
//Set HTML5 download attribute. This will prevent file from opening if supported.
var fileName = sUrl.substring(sUrl.lastIndexOf('/') + 1, sUrl.length);
link.download = fileName;
}
//Dispatching click event.
if (document.createEvent) {
var e = document.createEvent('MouseEvents');
e.initEvent('click', true, true);
link.dispatchEvent(e);
return true;
}
}
생성된 페이지의 콘텐츠에는 Content-Type만 있습니다.
Content-Type: text/html\n\n
이는 Apache와 lighthttpd 모두에 해당됩니다. 네트워크를 검사한 결과 .NET을 통해 Content-Type에 대한 명확한 변경 사항이 발견되지 않았습니다 lighthttpd
.
setenv.add-response-header
Apache를 사용하여 유사한 기능을 복제 할 수 있습니까 ?
Apache 호스트에 추가를 시도했습니다.
<Files "*.mobileconfig">
Header set Content-Disposition attachment
</Files>
그리고
SetEnvIf Request_URI "\.mobileconfig$" change_header
Header set Content-Disposition attachment env=change_header
그리고
SetEnvIf Request_URI "\.mobileconfig$" change_header
Header always add "Content-Disposition" "attachment" env=change_header
그리고
<Files "*.mobileconfig">
Header append Content-Disposition attachment
</Files>
또한 다음을 사용하여 실제 디렉터리에 .htaccess
파일을 생성해 보았습니다.
<IfModule mod_headers.c>
<FilesMatch "\.mobileconfig$">
ForceType application/octet-stream
Header append Content-Disposition "attachment"
Allow from all
</FilesMatch>
</IfModule>
그리고
<IfModule mod_headers.c>
<FilesMatch "\.mobileconfig$">
ForceType application/octet-stream
Header add Content-Disposition "attachment"
Allow from all
</FilesMatch>
</IfModule>
그 외에도 두 경우 attachment
모두 "attachment"
.
mod_headers는 Apache/Debian 9에서 기본적으로 활성화되어 있으며 이러한 대안 중 어느 것도 작동하지 않습니다.
사실 제가 기억하는 것은 lighthttpd
HTTP와 Apache
HTTPS를 사용하는 것뿐입니다. HTTPS를 사용하여 lighthttpd를 테스트했는데 HTTPS를 통해서도 작동하는 반면 Apache는 그렇지 않습니다.
curl -k -I https://localhost/cgi-bin/vpn.py
lighthttpd 서버의 출력:
HTTP/1.1 200 OK
Content type: text/html
Content-Length: 331
Date: Thu, 01 Jun 2017 09:03:26 GMT
Server: lighttpd/1.4.45
curl -k -I https://localhost/cgi-bin/vpn.py
Apache 서버의 출력:
HTTP/1.1 200 OK
Date: Thu, 01 Jun 2017 09:05:25 GMT
Server: Apache
Vary: Accept-Encoding
X-Frame-Options: sameorigin
Content-Type: text/html; charset=UTF-8
게다가 이는 Apache에서도 마찬가지입니다.
$curl -k -I https://localhost/download/xxx.mobileconfig
HTTP/1.1 200 OK
Date: Thu, 01 Jun 2017 09:13:35 GMT
Server: Apache
Last-Modified: Thu, 01 Jun 2017 03:08:57 GMT
ETag: "1f3b-550dd5b89d8df"
Accept-Ranges: bytes
Content-Length: 7995
X-Frame-Options: sameorigin
Content-Disposition: attachment
Content-Type: application/x-apple-aspen-config
Safari 사용->개발->웹 검사기 표시->디버거->홈 클릭->컬로 복사만 '컬'을 반환합니다.https://xxxx/cgi-bin/vpn.py붙여넣을 때 "-Xnull"입니다.
비활성화도 시도했지만 X-Frame-Options: "sameorigin"
아무런 차이가 없었습니다. (그것이 긴 가능성이라는 것을 알고 있습니다.)
답변1
.htaccess
이 파일을 사용하면 헤더에 Content-Disposition을 추가하는 문제가 해결되는 것 같습니다 .
그러나 기능 복제 문제와 디버깅 및 테스트의 복잡성이 추가되는 것은 다른 설명이 있는 것 같습니다.
보안상의 이유로 최신 베타 버전과 최신 버전의 Sierra 업데이트 파일이 모두 .mobileconfig
Safari의 "안전한" 파일 열기 목록에서 제거된 것으로 보입니다.
어제(또는 그저께) 직장에서 그리고 오늘 집에서 MacOS를 업데이트했는데 더 이상 .mobileconfig
프로덕션 또는 사전 프로덕션 시스템에서 파일을 자동으로 열 수 없습니다.
.mobileconfig
방금 iPhone을 iOS 10.3.3 베타로 업데이트했는데, 이는 프로필을 잠재적으로 위험한 것으로 보는 Apple의 경향을 확인한 것 같습니다. 이제 해당 파일을 클릭하면 새로운 경고가 표시됩니다.
웹사이트에서 프로필을 표시하기 위해 설정을 열려고 합니다. 이것을 허용하시겠습니까?
무시 - 허용