2013-07-11 6 views
2

Java와 관련하여 Safari 용으로 차단 된 응용 프로그램 및 사이트의 허용 목록을 자동으로 추가하려고합니다. 바이너리 plist를 내보내고 bash를 통해 편집 할 수는 있지만 검색 및 바꾸기 방법이나 특정 배치가있는 파일에 간단히 추가하는 방법에 익숙하지 않습니다. Bash - plist 텍스트 파일에서 WhitelistedBlockedPlugins 수정

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>BookmarksSidebarWidth</key> 
    <real>194</real> 
     ... 
    <key>WhitelistedBlockedPlugins</key> 
    <array> 
     <dict> 
      <key>PluginHostname</key> 
      <string>www.java.com</string> 
      <key>PluginIdentifier</key> 
      <string>com.oracle.java.JavaAppletPlugin</string> 
      <key>PluginLastVisitedDate</key> 
      <date>2013-06-05T17:03:26Z</date> 
      <key>PluginName</key> 
      <string>Java Applet Plug-in</string> 
      <key>PluginPageURL</key> 
      <string>http://www.java.com/en/download/testjava.jsp</string> 
      <key>PluginPolicy</key> 
      <string>PluginPolicyBlockWhenInsecure</string> 
     </dict> 
    </array> 
    ... 
    <key>com.apple.Safari.ContentPageGroupIdentifier.WebKit2UsesPageCache</key> 
    <true/> 
</dict> 
</plist> 

<key>WhitelistedBlockedPlugins</key> 
<array> 
    <dict> 
     .... 
     .... 
    </dict> 
</array> 

내가 존재하지 않는 경우, 검색하고, 교체 또는 추가 할 비트입니다. 존재하는 경우, <key>WhitelistedBlockedPlugins</key>으로 시작하여 닫는 </array>으로 끝나는 모든 것을 바꿔서 어쨌든 거기에 들어가는 것을 제어하고 싶습니다.

존재하지 않는 경우 파일 끝에있는 </dict>의 바로 앞에 추가 할 수 있습니다.

이것은 내가 생각해 낸 논리입니다.하지만 찾지 못하면 찾을 수있는 솔루션을 찾는 데 어려움을 겪고 있습니다.

스택 오버플로에서 비슷한 게시물을 읽은 후에 성공하지 못한 채 몇 가지 시도했습니다. Xcode/CLI 도구와 함께 제공되는 것을 포함하여 OSX에 고유 한 것을 사용하고자합니다.

것들 나는 시도했다 : 파일 작업에

echo,하지만 난 </dict> 전에 그것을하고 내가하고 싶은 유일한 것입니다 방법을 찾지 못하는있어 <key>WhitelistedBlockedPlugins</key> 및 해당 배열 인 경우 그 아무데도 찾을 수 없습니다. 누구나 지침이나 해결책이 있습니까? 감사합니다

+0

내가 사용하는 것이다'sed'은 (나오지도 = (S) tream은 (ED) 당사 홈페이지에서)하지만 예에 보인다 나 더 복잡해서'python' 스크립트 (또는 다른 언어)를 사용할 것이다. – furas

답변

1

동일한 문제를 해결했지만 기본값을 사용하여 com.apple.Safari.plist를 수정할 수있었습니다. . (한 라인에서 주로 일) 교체 간단한에 대한 (리눅스에서) 배쉬에서

#!/bin/sh 

# Get today's date 
TODAY=$(/bin/date "+%FT%TZ") 

# Determine OS version 
osvers=$(sw_vers -productVersion | awk -F. '{print $2}') 

# Server1's address 
SERVER1=server1.name.here 

# Server2's address 
SERVER2=server2.name.here 

# Get Java plug-in info 
JAVA_PLUGIN=`/usr/bin/defaults read "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Info" CFBundleIdentifier` 

# Check com.apple.Safari.plist for Server1 address 
SERVER1_WHITELIST_CHECK=`/usr/bin/defaults read $HOME/Library/Preferences/com.apple.Safari WhitelistedBlockedPlugins | grep PluginHostname | awk '{print $3}' | grep $SERVER1 | tr -d '";'` 

# Check com.apple.Safari.plist for Server2 address 
SERVER2_WHITELIST_CHECK=`/usr/bin/defaults read $HOME/Library/Preferences/com.apple.Safari WhitelistedBlockedPlugins | grep PluginHostname | awk '{print $3}' | grep $SERVER2 | tr -d '";'` 

if [[ ${osvers} -ge 6 ]]; then 
    if [[ -n ${SERVER1_WHITELIST_CHECK} ]]; then 

     # Server1 settings are present 
    /usr/bin/logger "${SERVER1_WHITELIST_CHECK} is part of the Java whitelist in Safari. Nothing to do here." 
    else   
    # Add Server1 to Java whitelist 
     /usr/bin/defaults write $HOME/Library/Preferences/com.apple.Safari "WhitelistedBlockedPlugins" -array-add '{"PluginHostname" = "'$SERVER1'"; "PluginIdentifier" = "'$JAVA_PLUGIN'"; "PluginLastVisitedDate" = "'$TODAY'"; "PluginName" = "Java Applet Plug-in"; "PluginPageURL" = "https://'$SERVER1'"; "PluginPolicy" = "PluginPolicyNeverBlock";}' 
     /usr/bin/logger "$SERVER1 has been added to the Java whitelist in Safari." 
    fi 

    if [[ -n ${SERVER2_WHITELIST_CHECK} ]]; then 

    # Server2 settings are present 
    /usr/bin/logger "${SERVER2_WHITELIST_CHECK} is part of the Java whitelist in Safari. Nothing to do here." 
    else  
     # Add Server2 to Java whitelist 
    /usr/bin/defaults write $HOME/Library/Preferences/com.apple.Safari "WhitelistedBlockedPlugins" -array-add '{"PluginHostname" = "'$SERVER2'"; "PluginIdentifier" = "'$JAVA_PLUGIN'"; "PluginLastVisitedDate" = "'$TODAY'"; "PluginName" = "Java Applet Plug-in"; "PluginPageURL" = "https://'$SERVER2'"; "PluginPolicy" = "PluginPolicyNeverBlock";}' 
     /usr/bin/logger "$SERVER2 has been added to the Java whitelist in Safari." 
    fi 

fi 

exit 0 

The code's also available here on my GitHub repo.

+0

공유 해 주셔서 감사합니다. 귀하의 방법이 절대적으로 선호 될 것입니다! 재밌 네요. 나는 과거에 당신의 github을 해독하고 실제로 토론토에있는 동료와 이야기를 나누었습니다. 그리고 그는 어떤 회의에서 당신을 만났다고 말했습니다. 위대한 업적과 당신이 과거에 저에게 제공해 주신 모든 도움에 감사 드리며 장래에 확신합니다. : D – TryTryAgain

+0

safari 6.1 용 com.apple.Safari.plist에는 ManagedPlugInPolicies라는 키가 있습니다. 이것은 WhitelistedBlockedPlugins와 다릅니다. – TryTryAgain

0

그냥 기본값을 사용할 수 있습니다 :이이 plist 파일을 수정하고 그렇게 OSX를 사용하는 경우가 있었기 때문에

defaults write ./file.plist WhitelistedBlockedPlugins -array '<dict><key>a</key><string>b</string></dict>'

+0

팁 주셔서 감사합니다,하지만 쓰기 디폴트는 단지 내가 성취 하려던 복잡성을 다룰 수 없었습니다. 아니면 확실히 알 수 없었습니다. – TryTryAgain

0

, 나는 Plistbuddy 내 가장 쉬운 해결책이었다 이용하여 발견했다. 특정 사이트를 찾아 교체하거나 특정 사이트를 유지해야하거나 특정 조건을 추가해야한다면 필자는 Perl이나 Python을 사용했을 것입니다.하지만 저는 전체 배열을 지우고 서면으로 쓸모가있었습니다. 내가 원한거야.

다음은 LaunchDaemon 또는 Agent로 작성하게 될 내 솔루션입니다.이 작업은 사용자 및 부팅 할 때마다 (승인되지 않은 또는 승인 된 Java 애플릿을 삭제하고 필요한 사이트가 추가되었는지 확인하기 위해) 발생합니다.

#!/bin/bash 

# Convert the com.apple.Safari.plist from binary plist to readable text file 
plutil -convert xml1 -o - ~/Library/Preferences/com.apple.Safari.plist > /tmp/com.apple.Safari.plist 

# Deletes the WhitelistedBlockedPlugins Key and corresponding array, if it exists 
/usr/libexec/PlistBuddy -c "Delete WhitelistedBlockedPlugins" /tmp/com.apple.Safari.plist 

# Adds the WhitelistedBlockedPlugins Key and array including two whitelisted sites 
/usr/libexec/PlistBuddy -c "Add :WhitelistedBlockedPlugins array" /tmp/com.apple.Safari.plist 
/usr/libexec/PlistBuddy -c "Add :WhitelistedBlockedPlugins:0 dict" /tmp/com.apple.Safari.plist 
/usr/libexec/PlistBuddy -c "Add :WhitelistedBlockedPlugins:0:PluginHostname string 'www.java.com'" /tmp/com.apple.Safari.plist 
/usr/libexec/PlistBuddy -c "Add :WhitelistedBlockedPlugins:0:PluginIdentifier string 'com.oracle.java.JavaAppletPlugin'" /tmp/com.apple.Safari.plist 
/usr/libexec/PlistBuddy -c "Add :WhitelistedBlockedPlugins:0:PluginLastVisitedDate date 'Wed Jul 10 12:00:00 PST 2013'" /tmp/com.apple.Safari.plist 
/usr/libexec/PlistBuddy -c "Add :WhitelistedBlockedPlugins:0:PluginName string 'Java Applet Plug-in'" /tmp/com.apple.Safari.plist 
/usr/libexec/PlistBuddy -c "Add :WhitelistedBlockedPlugins:0:PluginPageURL string 'http://www.java.com/en/download/testjava.jsp'" /tmp/com.apple.Safari.plist 
/usr/libexec/PlistBuddy -c "Add :WhitelistedBlockedPlugins:0:PluginPolicy string 'PluginPolicyNeverBlock'" /tmp/com.apple.Safari.plist 
/usr/libexec/PlistBuddy -c "Add :WhitelistedBlockedPlugins:1 dict" /tmp/com.apple.Safari.plist 
/usr/libexec/PlistBuddy -c "Add :WhitelistedBlockedPlugins:1:PluginHostname string 'another.siteexample.com'" /tmp/com.apple.Safari.plist 
/usr/libexec/PlistBuddy -c "Add :WhitelistedBlockedPlugins:1:PluginIdentifier string 'com.oracle.java.JavaAppletPlugin'" /tmp/com.apple.Safari.plist 
/usr/libexec/PlistBuddy -c "Add :WhitelistedBlockedPlugins:1:PluginLastVisitedDate date 'Wed Jul 10 12:05:00 PST 2013'" /tmp/com.apple.Safari.plist 
/usr/libexec/PlistBuddy -c "Add :WhitelistedBlockedPlugins:1:PluginName string 'Java Applet Plug-in'" /tmp/com.apple.Safari.plist 
/usr/libexec/PlistBuddy -c "Add :WhitelistedBlockedPlugins:1:PluginPageURL string 'http://another.siteexample.com/some/path'" /tmp/com.apple.Safari.plist 
/usr/libexec/PlistBuddy -c "Add :WhitelistedBlockedPlugins:1:PluginPolicy string 'PluginPolicyNeverBlock'" /tmp/com.apple.Safari.plist 

# copy the modified plist back where Safari will then use it and convert it back to binary plist itself 
cp /tmp/com.apple.Safari.plist ~/Library/Preferences/com.apple.Safari.plist 

참고로 참조 용으로 승인 된 사이트 목록을 Safari에 자동으로 추가하는 방법이었습니다. 나는 승인 된 사이트를 클라이언트 컴퓨터 및 읽기에 쉽게 추가 할 필요성을 확인한 후 영감을 받았습니다. http://nakedsecurity.sophos.com/2013/04/18/apple-updates-safari-gives-better-control-over-java-applets/