我上次在這篇文章裡面就有提到避免駭客上傳「造假的RAW檔案」的事情:
解決無法正常上傳RAW照片,getimagesize讀取RAW圖檔大小的問題
為了避免駭客上傳「造假的RAW檔案」所以在上傳檔案之後,還是必須檢查一下上傳的到底是不是RAW檔案?
當然,除了「造假的RAW檔案」也絕對會有「造假的JPEG檔案」!所以駭客想要在相片模組裡面上傳「造假的JPEG檔案」到insoler的相簿裡面,不管ImageMagick有沒有安全性漏洞,都是絕對不可能的任務!
我參考了一下別人提到的檢查ImageMagick弱點的方式,用BBEdit製作了一個文字檔案,內容是:
push graphic-context
viewbox 0 0 640 480
fill 'url(https://example.com/image.jpg"|ls "-la)'
pop graphic-context
但是在儲存檔案的時候,故意儲存的檔案名稱是test.jpg!然後把這個測試用的「造假的JPEG檔案」放在insoler的Web Server主機上面。

你可以看到假的test.jpg的檔案大小其實只有非常小的111byte而已!

我把test.jpg放在下載檔案夾裡面以後,打開「終端機」然後輸入cd downloads,打開下載檔案夾,然後輸入「convert test.jpg test.png」這個轉換圖片格式的指令。你可以看到居然真的執行隱藏在「造假的test.jpg檔案」裡面的UNIX命令列的「ls -la」列出檔案的這個指令!

因為我還沒有升級,所以還在使用ImageMagick 7.0.1-1 and 6.9.3-10版本的話,就只能使用暫時的方法修改「policy.xml」,然後再執行一次完全相同的「convert test.jpg test.png」這個轉換檔案格式的指令。

那麼,要怎樣修改「policy.xml」檔案呢?當然是要先去Mac OS X系統磁碟機裡面的「/usr」檔案夾裡面找到ImageTragick的「ImageTragick-6」檔案夾,裡面有一些XML檔案,用BBEdit等程式編輯工具程式打開「policy.xml」。

原本的「policy.xml」檔案內容就像這樣,寫了一堆註解,實際上執行的只有 <policy domain="cache" name="shared-secret" value="passphrase" /> 這一行指令而已。

我在最後一行的前面追加這一些指令:
追加的條件內容就像這樣:
<policy domain="resource" name="temporary-path" value="/tmp"/>
<policy domain="resource" name="memory" value="256MiB"/>
<policy domain="resource" name="map" value="512MiB"/>
<policy domain="resource" name="width" value="8KP"/>
<policy domain="resource" name="height" value="8KP"/>
<policy domain="resource" name="area" value="128MB"/>
<policy domain="resource" name="disk" value="1GiB"/>
<policy domain="resource" name="file" value="768"/>
<policy domain="resource" name="thread" value="2"/>
<policy domain="resource" name="throttle" value="0"/>
<policy domain="resource" name="time" value="120"/>
<policy domain="system" name="precision" value="6"/>
<policy domain="coder" rights="none" pattern="EPHEMERAL" />
<policy domain="coder" rights="none" pattern="HTTPS" />
<policy domain="coder" rights="none" pattern="MVG" />
<policy domain="coder" rights="none" pattern="MSL" />
<policy domain="path" rights="none" pattern="@*" />
不需要重新啟動Mac OS X電腦,也不用登出、重新登入帳號,只要修改好「policy.xml」並儲存,就會立即生效了!這樣雖然可以防止convert去轉換假的JPEG檔案,但我猜想這也只能阻擋一時,不是長久的辦法!
但不管ImageMagick要不要修改這些安全性漏洞,也不管未來ImageMagick還有沒有更多的重大漏洞,insoler絕對會比其他網站更安全許多!特別是我自己修改、編寫的Photos相片模組!因為我從一開始就知道會有駭客偽造假的JPEG檔案,想辦法入侵到某個網站!所以到目前為止也沒有讓駭客成功上傳偽造的JPEG檔案過!