2009-07-25 31 views
0

我今年夏天的項目是製作一個多人在線flash遊戲。我可以使用一些建議,因爲我以前從未實現過安全登錄系統,更不用說在Actionscript中這樣做了。一般密碼安全&&在Actionscript 3中執行3

我現在的設置是一個.swf發送/接收遊戲數據到/從與MySQL數據庫進行通信的Java服務器有關帳戶信息。

1)我應該如何進行一般?我在想,也許我應該讓我的.swf加密密碼,發送它,(讓我的服務器再次加密它?),然後將其存儲在數據庫中。

2)我敢肯定,我可以在Java中找到大量的加密指南。任何人都可以推薦一個Actionscript庫,甚至只是一個通用的加密算法(所以我可以搜索一個AS等於我自己),這將是可以接受的這項任務?

另外,我的遊戲通過XMLSocket進行通信。我不認爲這應該導致任何安全問題,但請讓我知道,如果我錯了。

回答

1

發送密碼的一般例外方式是根本不發送它們,因爲這被認爲是非常不安全的。相反,如你所說,你發送一個不同的形式,如散列密碼,雖然這仍然有一些退步 - 例如彩虹表等

因此,最好的方法是散列密碼與一個隨機數只使用一次),即一個隨機的字符串和一個時間戳,然後發送。然後,我會將散列字符串,nonce和時間戳以xml格式發送給您的數據庫服務器,然後他們可以嘗試使用您爲用戶存儲的密碼重現散列的密碼。

這是W3C的usernameToken規範如何做到的。看到 - http://docs.oasis-open.org/wss/v1.1/wss-v1.1-spec-os-UsernameTokenProfile.pdf

<UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wsswssecurity-utility-1.0.xsd"> 
    <Username>jon</wsse:Username> 
    <Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">9JSGeXj+zpvEp42I20K/1bg8rCE=</Password> 
    <Nonce>TaF3g5F37wSHtSdY</Nonce> 
    <Created>2009-07-25T10:29:34Z</:Created> 
</UsernameToken> 

但是,這可能會引入不必要的複雜性。

所以你可以簡單地散列密碼並將它發送給服務器,然後服務器將散列它的密碼版本,並且如果它匹配你的話。雖然在一天結束時,您必須問自己,實際的.swf文件有多安全,因爲您可以反編譯它們,並跳過原始登錄名。但是,大部分情況下這就足夠了。

爲了散列stings我通常使用as3crypto(code.google.com/p/as3crypto/) - 但我知道住所utils包有一個md5和sha-1的實現。

至於xml套接字,只要您在動作腳本應用程序中有一個跨站點策略文件,它允許它與該域進行通信並且該域允許Flash與其通信。否則您可能會收到安全錯誤。

希望這會有所幫助。

Jon

+0

要實現這些方法中的任何一種,我的密碼是否需要以明文存儲? – MADgood 2009-07-25 16:10:40

+0

根本沒有,你可以將你的密碼保存在數據庫哈希值中,並簡單地在遊戲中對密碼進行哈希處理,然後再用上述方法重新哈希即nonce + timestamp - 做同樣的服務器端會產生相同的結果。 – Jon 2009-07-25 17:07:34

+0

注意:上面的xml示例是散列的,但是以base64形式存在,因此它沒有被加密,只是想我明確表示 – Jon 2009-07-25 17:09:26

0

Here是一個關於使用ActionScript對md5進行加密的鏈接(我只是使用了它),因爲它是最常用的加密算法。您不應該在服務器中加密它,而是使用到數據庫的安全連接,並將消息中加密的內容與數據庫中的加密密碼進行比較。