Posted on 2008-07-16 18:08
RichardHe 閱讀(1654)
評論(29) 編輯 收藏 引用
說下最近在忙的事吧.最近公司游戲和一個社區合作.我負責和這個社區平臺的客戶端和服務器的設計
這個社區老是把一些簡單問題復雜化來做.本杰我們的和其它平臺的都已經做好了的,但是它們現在想在我的
的客戶端加加一個內嵌瀏覽器.說是怕它們的帳號和密碼被盜,難道放在WEB中輸入就不會了嗎?不都是在客戶端
輸入嗎?有什么本質的區別嗎?
現在的流程是這樣的,通過客戶端內嵌瀏覽器輸入的用戶名和密碼到它們的服務器驗證,然后把結果返回到我們
游戲帳號服務器,再通過帳號服務器通知我們的客戶端,從而再進行登錄以后的事情.
以前我們和XX網的流程,先在客戶端輸入用戶名和密碼,通過SOCKET到他們的服務器進行驗證,通過以后再登錄到我
們的游戲服務器,如果這個用戶名在我們的帳號服務器中的話那么進行驗證登錄,如果不在,則在帳號服務器寫入一條
這個帳號的記錄,包括用戶名,是否成年等等.
PS:以上的密碼都是經過MD5和一個密鑰加密的,都是不可逆的,有那么容易破解嗎?
Feedback
# re: 08年07月16日[未登錄] 回復 更多評論
2008-07-16 19:57 by
如果覺得自己是對的 一定要用論證說明 有些人是不懂技術的 只是想當然 還是要溝通好 。
# re: 08年07月16日 回復 更多評論
2008-07-16 23:02 by
我談下自己的想法,是不是那家公司覺得對于web訪問提供數字簽名,加密處理等更加方便(例如客戶端安裝控件,服務端也做對應配置),可能考慮部署更加方便,現成的資源也比較多.
# re: 08年07月16日[未登錄] 回復 更多評論
2008-07-17 08:41 by
他們的server端是java之類的東西寫的吧。
他們不會或者懶得寫socket,想直接用servelet而已
# re: 08年07月16日 回復 更多評論
2008-07-17 09:20 by
@huoxd
應該是這樣的!因為他們公司沒有用過C++開發,絕大多數都是WEB的方式,一直在想辦法通過WEB來驗證等等!
# re: 08年07月16日 回復 更多評論
2008-07-17 09:21 by
@cppexplore
我也不知道他們服務器是什么寫的,應該是JAVA,因為他們的WEB也是JSP的
# re: 08年07月16日 回復 更多評論
2008-07-17 09:22 by
人家是怕帳號密碼在你的客戶端輸入的階段就被HOOK走了,而不是害怕你的數據包被破解了。在瀏覽器輸入帳號密碼絕對比在你客戶端輸入要安全得多的。他們的要求其實也是合理的。因為瀏覽器是相對安全很多的。但是如果因為這個問題涉及到要修改你系統原先的架構那么就不劃算了,如果只是登錄流程變一下,嵌入個瀏覽器,那還是不過分的。
# re: 08年07月16日 回復 更多評論
2008-07-17 09:32 by
@txw
謝謝你的指點.如果現在嵌入個瀏覽器所增加的工作量相對以前來說是相當大的,我這邊的系統和數據庫也要專門重新構架了.因為那樣的話,我還要專門處理它們的服務器返回到我們的游戲服務器,再從我們的游戲服務到游戲客戶端,這之間有一個映射關系比較難處理。
# re: 08年07月16日 回復 更多評論
2008-07-17 10:41 by
是的,如果問題涉及到架構,那或許需要重新溝通。但是如果帳號密碼安全至關重要,或許他們的方案更有保障。瀏覽器可以保證輸入的時候被HOOK的可能性大大減少,同時數據包WEB都是SSL加密的,要破解的可能性也是微乎其微的。還有client是有可能被逆向工程的。
# re: 08年07月16日 回復 更多評論
2008-07-17 11:09 by
@txw
謝謝了..經過你這么一說真是明白了許多..
因為自己沒做過WEB開發過,所以其中的許多東西還是不太了解的!
# re: 08年07月16日[未登錄] 回復 更多評論
2008-07-17 12:18 by
根本原因還是因為那邊沒有socket,想直接用servlet吧。這樣他們那邊的改動很小,不需要涉入他們不熟悉的領域。被hook,指鍵盤輸入嗎,web下一樣可以。單純的得出結論:web輸入比client端輸入更安全,這個論調還需要詳細的論證吧,用客戶端的東東多了去了,也都沒用客戶端嵌入web的方式輸密碼。
https可以用ssl加密隧道,socket一樣可以。
這個問題就是要么你們改,他們不改,要么他們不改,你們用web輸入。
衡量2個方案的改動量,還是你們改比較簡單。
# re: 08年07月16日[未登錄] 回復 更多評論
2008-07-17 12:40 by
小小的問一下: 直接在客戶端發送http請求 可以不呢?
# re: 08年07月16日 回復 更多評論
2008-07-17 12:46 by
我也認為 他們只是懶得改 罷了。
不過反過來說,你現在的情緒是否也有點這樣的成分在里面呢?
不如趁這個機會練下手。等做出來之后,你就多份經驗了,WEB的,Socket的你都弄過,那么下次再有類似需求的時候,你就可以權衡哪種更好了。
# re: 08年07月16日[未登錄] 回復 更多評論
2008-07-17 13:01 by
@ 代李
可以
這對博主來說是個好方案,還是用socket發送,可以建立tcp短連接,發送的數據采用http協議格式的,這樣就兩邊皆大歡喜了吧。
# re: 08年07月16日 回復 更多評論
2008-07-17 14:36 by
@kun
現在是25號正式上線,21號上內測,沒時間啊?時間上來不急.
# re: 08年07月16日 回復 更多評論
2008-07-17 16:37 by
@cppexplore
用socket發送,可以建立tcp短連接,發送的數據采用http協議格式
可以這樣嗎?小弟我也是第一次用網絡這東西.所以許多東西還是不太懂.
是否可以指點下呢?
# re: 08年07月16日[未登錄] 回復 更多評論
2008-07-17 17:20 by
@RichardHe
web也是用的socket。http的通訊方式如下:
建立連接(connect)
發送請求(send)
接收響應(recv)
斷開連接(close)
每次請求響應 都要建立連接,斷開連接,就是tcp短連接,也是http使用的方式。
http的格式可以看rfc,或者抓包看看就知道
一般是(post方式才需要body的):
post/get/header url http/1.1\r\n
header: value\r\n
Content-Length: ..\r\n
Content-Type: ..\r\n
\r\n
body
內嵌web可以說是個很快速的方案,只要你能拿到web上返回的數據,又何必自己寫socket發數據呢。或者可以一邊用內嵌web寫原型系統,一邊寫socket方式的。
# re: 08年07月16日 回復 更多評論
2008-07-17 17:32 by
@cppexplore
現在問題是很難從我的客戶端得到WEB上返回的數據,要是能得到的話就什么都簡單了.
# re: 08年07月16日 回復 更多評論
2008-07-17 17:33 by
可以看看libevent對http的封裝,類似的庫也不少。
# re: 08年07月16日[未登錄] 回復 更多評論
2008-07-17 20:05 by
@RichardHe
我猜也是你拿到返回的數據很困難,呵呵。
用socket吧 不需要用apache ace libevent那么復雜的封裝庫。寫個最基本最簡單的阻塞式socket,連接 發送 ,等響應,之后關閉就是了。發送就是發送這個好了:
POST /url HTTP/1.1\r\n
Content-Length: 24\r\n
Content-Type: application/txt\r\n
\r\n
username=jim&pass=mypass
詳細的信息可以問那邊要,他們一定有示例的頁面,用頁面發個請求,抓包就知道了。
# re: 08年07月16日 回復 更多評論
2008-07-18 11:13 by
@true
謝謝指點!!
# re: 08年07月16日 回復 更多評論
2008-07-18 11:14 by
@CppExplore
謝謝指點......但還是不知道怎么抓包?
用SOCKET抓嗎?也不知道它們返回的是什么樣的消息格式?
它們是有一個專門的登錄頁面的.
POST /url HTTP/1.1\r\n
Content-Length: 24\r\n
Content-Type: application/txt\r\n
\r\n
username=jim&pass=mypass
這個是指什么??我這邊所要發的嗎?這個是WEB里面要發的吧?
# re: 08年07月16日[未登錄] 回復 更多評論
2008-07-18 12:38 by
Web登陸和客戶端登陸在安全性上沒有太大差異. 能破解的都能破解. 建議直接提交Web接口數據,得到返回結果
# re: 08年07月16日 回復 更多評論
2008-07-19 20:27 by
@Jezz
我的客戶端很難得到返回的結果!
# re: 08年07月16日[未登錄] 回復 更多評論
2008-07-21 09:42 by
直接使用socket發送 http協議 返回的東西跟網頁一樣 只是會有http頭
1·可以通過http頭來判斷是否連接發送成功
1·可以通過內容來判斷是否驗證成功,比如檢索內容里面是否有成功字樣,,等。
# re: 08年07月16日 回復 更多評論
2008-07-21 10:45 by
@代李
有例子參考下嗎???因為沒用過SOCKET發送HTTP這樣的
所以不知道怎么做?也不知道怎么用客戶端接收HTTP返回的東東!
謝謝關注!
# re: 08年07月16日 回復 更多評論
2008-07-23 01:36 by
我不信瀏覽器更安全。
# re: 08年07月16日 回復 更多評論
2008-07-23 08:52 by
@dodo
呵呵..我覺得應該都差不多的...但是就是有些人覺得瀏覽器比客戶端更安全
# re: 08年07月16日 回復 更多評論
2008-08-01 21:24 by
# re: 08年07月16日 回復 更多評論
2008-08-02 08:57 by
@daili
謝謝了..