2011-05-26 66 views
3

我想將我的遊戲中的一個移植到WebGL,但它使用我從第三方獲得許可的聲音和圖像。如果只是將不受保護的文件直接從Web服務器上取出,將違反許可證。用Javascript保護內容

之前,我通過以我自己的文件格式嵌入一堆這些文件來解決這個問題,但我不確定是否可以從文件中讀取X個字節,然後將其傳遞給Javascript並說「嘿,這是一個PNG圖像。」那可能嗎?有沒有其他好的方法來保護文件?

+0

所以許可證要求..什麼?您是否將內容直接嵌入到已編譯的可執行文件中?如果是這樣,不管你做什麼,Javascript可能會違反... ... – 2011-05-26 16:24:42

+0

許可證只是要求文件不在公開的地方,有人可以很容易地找到它們(通過檢查目錄或類似的東西那)。 – Chris 2011-05-26 16:35:32

+2

網絡的本質意味着有人能夠輕鬆地找到他們。 – 2011-05-26 16:39:18

回答

0

該做的伎倆:

var i = new Image(); 
i.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAAAAXNSR0IArs4c6QAAABJJREFUeJxj+N/wHw9iGJXGhgDu6Pk5cOz+IwAAABF0RVh0Q29tbWVudAB0RVhUIHRleHTAVE3RAAAAAElFTkSuQmCC'; 

然後,如果你嵌入該字符串的地方模糊不清,爭奪它,它應該保持遠離唾手可得。

+0

克里斯你可以修改這個,並提供更多的信息?我對此非常感興趣。我認爲這正是我正在尋找的。我在哪裏可以找到更多信息? – Ben 2013-04-29 20:37:04

3

如果這些東西必須在用戶的瀏覽器中結束,那麼它就存在於用戶的瀏覽器中。除了通過混淆之外,你無法保護它,如果你保護的東西具有實際價值,那麼這是完全浪費時間。 (想想這樣說:如果它是你會遭受一些損失相當大,如果有人知道了非法真正有價值的東西—意義,小偷將獲得可觀的收益—則需要克服混淆了未成年人的努力顯然是值得的小偷)。

+2

對。您在瀏覽器中看到,聽到或聞到的所有內容都已傳遞給瀏覽器,因此也已傳遞給用戶。 – Hyperboreus 2011-05-26 16:26:40

-2

您的許可證是否允許您以加密形式將資源存儲在Web服務器上?如果這不是一種選擇,那麼你可能不得不使用一些可以封裝媒體的東西 - Java小程序。

+1

如果用戶可以將小程序拖入瀏覽器,則用戶可以保存該小程序並將其拆開。 – Pointy 2011-05-26 16:28:12

+0

你可以告訴Javascript解密一個圖像文件下載後? (即類似「var img = new EncryptedImage(url,key)」) – Chris 2011-05-26 16:39:16

+0

@Chris:恐怕你會走下一條盲巷。所有這些混淆都將不可避免地失敗。在處理網頁內容時,放棄「保護」它的所有希望。 – 2011-05-26 17:08:20

0

您不能保護的東西在JavaScript中,因爲它在客戶端和任何你做混淆或「保護」執行文件,可以通過足夠的願意這樣做的用戶撤消。

1

如果你想保護的內容在您的JS文件,你需要創建一個持久的JS對象,通過定義一個對象,它是一個函數調用的結果。

這樣的事情...

var imageContainer = function(protectedImageContainer) { 
     var that = {}; 
     that.getImage = function() { 
       // bytes -> image transform would happen here. 
       return protectedImageContainer.data; 
     }; 
     return that; 
}; 

在這個例子中,protectedImageContainer.data保護和防篡改,只能通過你的getImage方法訪問。

這與阻止右鍵單擊「另存爲...」應該讓你更接近你想要的位置。

+0

在「//字節 - >圖像」部分是創建一個新的Image()對象並自己定義其像素數據的想法,而不是像new Image(「path/to/img.png」)那樣做? – Chris 2011-05-26 17:00:18