如何寫安全的網絡通訊服務器程序----避免程序崩潰的幾種方式

       首先,必須保證不使用如下三個函數:

strcpy, strcat, sprintf.

因爲他們不檢查目的端的大小,如果源字符串長度大於目的端的緩衝區大小,則會導致程序崩潰。

所以如果在網絡服務器上使用瞭如上函數,假如客戶端不小心發送了一個超大的字符串過來,那麼服務器程序很容易崩潰。

替代方案如下:

strncpy, strncat, snprintf.

因爲他們指定了目的端的大小,如果源字符串長度太長,則多餘的內容會被丟棄。

 

       其次,服務器端程序一定要保證協議層的緩衝區不被堵塞。避免方法有:

1,開闢一個專門的線程,一旦緩衝區內有內容就取出來了,後續處理的快慢沒有關係,再想辦法出來,比如說超時等等。

2,用select或者pselect。

3,accept後開闢新的線程去處理這個客戶端的連接。

       還有,如果程序中需要操作數據庫,那麼可以用封裝成對象來連接,寫入。因爲這樣的話,此對象的操作是在棧上的操作,出了此程序段,對象自動析構,一點殘渣都不剩,如此下次再操作時菜比較安全。

       最後,如果程序中用到鎖的話,除了互斥鎖,還有共享鎖可以考慮,因爲共享鎖可以同時多個線程來讀。另外,使用時也可以封裝成對象來使用,像操作數據庫一樣,最好也是使用對象,出了此程序段,對象自動析構,一點殘渣都不剩,這樣就不會存在鎖沒有釋放掉的情況下,又去使用這把鎖,從而導致死鎖。

發佈了38 篇原創文章 · 獲贊 8 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章