2010-11-07 43 views
1

我使用AMFPHP將內容從我的服務器傳輸到我的Flex應用程序,因爲Flash是客戶端技術,我想讓人們難以抓取受保護的文件,所以我創建了一個系統,流SWF文件到另一個Flash播放器,我已經做了所有的URL流測試,現在我想通過SWF文件作爲bytearray播放器..因爲我認爲這是更安全和更難以打破,在未來我甚至可能會做一些我自己的加密,如果我更熟悉字節和位..反正我的方法是最好的? (SWF到ByteArray?)還是有更好的?如果ByteArray的方法是最好的,我在正確的格式outputing swf文件面臨的一個問題,我使用了一個非常原始的方法..從PHP腳本SWF到bytearray

 $file = file_get_contents($file); 
     $byteArr = str_split($file); 
     $byteArr = array_map('ord', $byteArr); 
     $return['fileBin']->data = $byteArr; 

和我返回$返回變量...

您的幫助受到高度尊重和讚賞。

拉米

回答

2

唔...

我用非常類似目前(我開發的MMORPG ...) - 我決定我需要在遊戲的內容預裝所以玩家沒有按」不得不等待這麼多。不幸的是 - 這些文件很容易瀏覽甚至反編譯。

因此,我做了一個需要密碼的自定義壓縮+加密組合。該密碼在需要時由服務器發送。

但是,在你的情況下,這不是最好的事情。 ByteArray並不難破解 - 實質上它會發送原始字節數據。除非你加密(+1)。

另一件好事就是標記請求(+1)。即在PHP中,您生成一個「令牌」並將其寫入令牌列表文件。令牌將像32個字母數字一樣。該令牌也會傳遞給請求的SWF對象/頁面,這會立即在請求中使用它。該請求僅與有效令牌一起使用,即記錄在令牌列表中的令牌。當它被使用時,它會立即被移除。此外,每個令牌都可能有時間限制。像15秒或20秒。如果當時未使用,請將其刪除。如果超過時間限制,用戶端(如果加載太長)需要重新加載(儘管不是手動的 - 可以是一些腳本,或者iFrame只是重新加載SWF)。

編輯:問題的作者有不同的問題 - 他的目標顯然是使SWF文件只能由加載程序應用程序請求訪問/加載。沒有其他的。所以:

恐怕這是一件很難的事情,但是......這是不可能的,使一些事情不可能破解/入侵。幸運的是,在網絡(儘管它們更頻繁地被攻擊)或互聯網方面做起來更容易。您無法制作只能由您的應用程序加載的內容。如果你仔細想想 - 在邏輯上甚至是不可能的 - 在這兩種情況下(用戶請求和應用程序請求),用戶計算機都會請求一個文件,並且很容易跟蹤該請求並複製它或簡單地截取它。如果前兩者中的任何一個不起作用,則將使用SWF的反編譯。關於打擊所有的可能性一點點:

A)跟蹤和複製

這是此類工具的Firebug的FF,或在Safari一樣好(真的)督察容易可行。通過這些,很容易看到請求的內容,標題和響應(幸運的是,不可能下載請求的文件 - 只要它不是html或純文本MIME就不會被記錄),也可以是響應頭文件。

如果代碼中的請求URL在其中一個工具的控制檯的控制檯中最終顯示,那麼在代碼中對請求URL進行模糊處理是沒有用的。解決辦法是:

  1. 使只要求一次(如上所示 - 符號化)
  2. 使用一種特殊的標頭的要求,如「連接:保持活動」 - 這使得相當更難正常的攻擊者,因爲他們經常只是複製URL並在瀏覽器中請求它 - 但是連接會自動出現「Connection:close」,在服務器端代碼中檢查並且只接受保持活動(或者你的「特殊「)請求
  3. 使用與HTTP不同的協議 - 不幸的是,這涉及用於在不同端口上進行通信的服務器端套接字函數,而不是HTTP 80 ...大多數服務器提供程序不允許用戶這樣做,但是如果可以的話 - 並希望安全 - 不要使用任何已知的協議,而是使用任何已知的協議,而只是適合您的需求的東西 - 畢竟,您可以控制服務器端和客戶端,因此可以以任何方式進行通信。

B)攔截

這是一個有點更高級別的攻擊 - 但如果攻擊者熟練,具有一定的資源,並不難做到。從本質上講,這有一個類的代理(因此資源 - 需要一個啓用了套接字的服務器,我自己有:D),他將用它通過他的瀏覽器連接。然而,代理人不僅要轉發內容,還要同時記錄內容。打擊:

  1. 使用不同的協議
  2. 該協議的加密 - 因爲即使數據被記錄下來,它並不重要 - 它不再僅僅是HTTP報頭後面的原始文件數據(頭很容易刪除和「中提琴」) - 只有客戶端應用程序知道如何使用這些數據

C)編譯

這是即使這麼難做 - SWF反編譯器現在已經不是什麼新東西了,應用程序中的任何代碼都可以免費提供給攻擊者。即使你使用不同的協議,攻擊者也可以用更少的或更多的努力闖入它。解決方案:

NONE - 你可以使它更難攻擊 - 混淆你的代碼,有很多的(如果你真的想安全...混亂可能只是你的朋友),使用跨實際代碼的跨客戶端跨服務器請求 - 加載代碼的動態加載輔助SWF ...

+0

我投你一個爲你的答案和幫助,但遺憾的是,這不是我正在尋找的,我會改述我的問題,假設我有一個文件,一個SWF文件,我只想用我的SWF播放器流式傳輸,使用加載器類,讓這個SWF只能通過flex應用加載的最佳方法是什麼?我知道可以僞造頭文件,並且設置令牌不會讓事情變得更加困難,因爲使用調試器的人(如螢火蟲)能夠知道閃存應用程序和服務器之間發出的請求...... :(我是卡在這裏! – 2010-11-07 16:54:31

+0

恐怕這不太容易...編輯我的答案,我想這將是一個更長的迴應。 – 2010-11-07 17:05:55

+1

完成。這真的很長,但它涵蓋了很多潛在的威脅和解決方案。 – 2010-11-07 17:28:47