2009-11-11 112 views
0

我開發了一款應用程序,當前正在應用程序商店中,體重僅爲400MB以上。這樣做的主要原因是該應用程序提供了大量的視頻,目前這些視頻已經融入二進制文件。保護付費iPhone所需的外部資源應用程序

對於我們的下一個版本,我們希望將此視頻外部化,允許用戶下載他們想要保留的視頻,並刪除他們已經觀看的視頻。我們目前正在採購CDN等,現在正在設法解決我們如何保護這部視頻。

問題是,如果我們只是使用標準的URL到mp4s,沒有應用程序的人將能夠下載我們用於網上付費客戶的視頻。有沒有什麼方法可以保護這些視頻,以防止他們輕易被盜? (我確信,一旦視頻被下載,我們就可以「輕鬆」地說出來,人們總能找到將應用程序從應用程序中剔除出去並將其置於洪流中的方法,但是如果它們在偷竊,那麼如果我們沒有做到這一點,不得不支付的帶寬...)

我在想,也許我們可以以某種方式生成一次性網址,請求使用設備的UDID的某種散列,然後在服務器上驗證,並且然後允許用戶通過它下載。或者這只是無稽之談?

這個問題的明智解決方案是什麼?

由於提前,

UPDATE: 不幸的是我不能使用在應用程序內購買機制,這個程序是很好,真正在那裏,所以需要找到我自己的保護我們的內容的方式。

將這項工作作爲一個解決方案:(原諒我的白話,通常是客戶端編碼器)

1)服務器端,隨機令牌每5-10分鐘可以由應用程序請求的產生。

2)一旦應用程序有此標記,它使用此,該裝置UDID,並在應用程序內烘烤,以產生通過MD5或東西另一令牌祕密密鑰

3)的裝置,使得對請求具有NEW令牌和設備UDID的服務器

4)服務器通過重複相同的進程服務器端(使用相同的魔術鍵)並查看它使用提供的udid生成的令牌是否匹配應用程序提出請求。如果是這樣,它傳遞文件。

會這樣嗎?

+0

嗨,不幸的是我不能使用IAP機制,因爲我們已經有一個很大的安裝基礎,我不能再次充電... – Tricky 2009-11-11 20:20:35

回答

2

我認爲你的建議與我的建議是一致的。

查看Amazon S3方法以鏈接過期示例。我寫在PHP以下幫手產生這些鏈接(與Zend框架的Zend____Crypt____Hmac作品一起,請參閱http://framework.zend.com/wiki/pages/viewpage.action?pageId=35309獲取更多信息):

public function getExpiredQueryString($objectName, $expireTime, $bucketName){ 
      $stringToSign = "GET\n\n\n$expireTime\n/$bucketName/tracks/$objectName"; 
      $hashedSignature = Zend_Crypt_Hmac::compute(self::AMAZON_AWS_SECRET_KEY, 'sha1', utf8_encode($stringToSign)); 
      $signature = urlencode($this->_hex2b64($hashedSignature)); 

      $url = 'http://' . $bucketName . '.s3.amazonaws.com/tracks/' . $objectName . '?AWSAccessKeyId=' . self::AMAZON_AWS_KEY . '&Expires=' . $expireTime . '&Signature=' . $signature; 
      return $url; 
    } 

以下是_hex2b64的內容(不是原裝的,而是有益的,看看) :

private function _hex2b64($str){ 
      $raw = ''; 
      for ($i=0; $i < strlen($str); $i += 2) 
      { 
       $raw .= chr(hexdec(substr($str, $i, 2))); 
      } 
      return base64_encode($raw); 
    } 

長期和短期的是,你可以創建可在數據庫表中的TTL(例如)標記化鏈接結構是用於驗證用戶和授權的下載/流您的資產。

就可擴展性而言,您需要探索所有選項,包括數據庫選擇,Web服務器,操作系統,服務器端代碼庫的整體效率等。這是一個更大的對話。

希望這會有所幫助!

1

您可以免費提供應用程序,並提供視頻作爲應用程序內購買。您的服務器可以使用API​​來驗證IAP收據,以確保客戶通過Apple實際合法購買了該物品。

0

您可以隨時讓iPhone應用程序向包含其IP地址的服務器發送請求;然後在您的服務器上返回只允許訪問該IP的下載URL。

0

我發現加密數據效果很好。讓iPhone發送隨機密鑰,用服務器上的該密鑰加密,在iPhone上解密。在CBC模式下使用AES,128bit。如果你想要更好的性能,你可能會考慮只加密文件的一部分,比如說10%的塊在文件上均勻分佈,這是一個折衷的結果,視頻不值得關注vs保存的加密時間。

+0

這聽起來很有趣...雖然它聽起來相當沉重的表現。我們在安裝1000次後已經有1000次,聽起來我們會做大量的服務器端加密。 – Tricky 2009-11-11 20:26:55