2012-11-12 38 views
3

我正在建設一個使用PHP和mySQL數據庫的網站。該網站現在具有登錄/註冊功能,並且可以訪問牆壁輪廓。在同一個網站上,我想用websockets構建一個大型的聊天應用程序。這次聊天應該有一個動態擴展的聊天室(可能會遇到數千個)中型團體(+/- 25人)。使用http請求在php旁邊使用node.js安全嗎?

我一直在考慮node.js來運行websockets,但我只想使用node.js來處理傳入的消息和廣播。另外,我想使用PHP將傳入的消息保存在數據庫中。我想在node.js服務器文件中使用http調用來處理此操作,如http://docs.nodejitsu.com/articles/HTTP/clients/how-to-create-a-HTTP-request中所述。我還希望使用http請求來獲取用戶的屬性(例如名稱和個人資料圖片),以便這些可以顯示給同一聊天室中的其他用戶。我不想處理這個客戶端,因爲用戶可以輕易地假裝成其他人。

php網站和node.js服務器都在本地主機上運行。該網站在127.0.0.1:80上運行,服務器在127.0.0.1:1337上運行。

我的問題是,這種方法保存?在node.js服務器上執行http請求以發送/接收數據庫中的數據時是否存在安全風險?在PHP網站旁邊運行node.js是一個好主意,還是應該純粹在node.js上構建我的網站?還有其他的選擇嗎?

回答

2

這種方法安全嗎?

肯定。我的意思是在技術上,當然。它不像任何單獨的技術都不安全。但是,它的確會讓你的架構變得更復雜,這可能會導致更多的人爲錯誤和錯誤或安全問題。但這更多的是關於人類和複雜性,而不是技術本身。

對node.js服務器發送/接收數據的http請求是否存在安全風險?

不,不超過任何其他後端技術。它位於Web服務器後面,運行可能訪問或不訪問數據庫並返回響應的代碼。大量生產網站運行node.js,沒有任何安全問題。

在PHP網站旁邊運行node.js,還是應該純粹在node.js上構建我的網站?

這很難回答。我認爲整體上一個更簡單,更可維護的模式也是把事物放在一個地方和技術上。但隨着應用程序的增長,移除獨立部分並以自己的最佳方式自行實施它們實際上非常普遍。通常這與性能有很大關係,將高流量系統與低流量系統分開,就像技術本身的功能一樣。

但是,當你有多個角色不同的服務器時,這通常會起作用。對於較小的項目,價值通常較低。


我不知道這是否會回答你的問題,但總之:它本質上並不壞。這取決於。

+0

然後,我認爲在重寫大量代碼以使其適用於某項技術或僅繼續使用PHP並在其旁邊構建node.js服務器,冒更多的錯誤/流量之間可能會有所考慮。另一種方法是使用AJAX進行長時間輪詢或短時間輪詢,但websockets似乎是一種更好的方法。謝謝您的回答。 –

+0

沒問題。在仔細考慮之後,我會得出結論:好的程序員將能夠採取任何一條路,並且做得很好,沒有問題或複雜性。這裏沒有明確的正確答案。 –

+0

然後我想我會繼續使用PHP和node.js,因爲學習node.js會花費太多時間,並且我已經在PHP方面經驗豐富。 –

0

我不認爲有混合Node.js和PHP/Apache本質上不安全的東西。就像在你的電腦上運行多個程序一樣,他們有自己的空間,傾聽他們自己的端口,不要直接相互交談。

但我個人會更關心服務器資源(你的CPU有多快?多少RAM?)。在一個平臺上構建您的網站肯定會更有效率。但取決於你正在建設的東西,可能兩者都可以。

從我看到的基準測試中,Node.js比Apache更需要資源。但是Node.js對於某些應用程序來說也非常快。

+0

該網站稍後將在VPS上運行。這意味着我必須得到更昂貴的VPS服務,否則我將不得不重寫很多代碼才能使我的網站在node.js上運行。我也考慮過phpwebsockets,但我無法得到這個工作。但很高興聽到它不是不安全的:我也考慮過使用AJAX,但我讀過使用AJAX和node.js是不安全的:http://stackoverflow.com/questions/5373987/how-to-use -jquery-ajax-calls-with-node-js,這就是爲什麼我想知道http請求是不安全的。謝謝您的回答。 –

+0

AJAX並非不安全...跨域ajax有可能被黑客使用,但瀏覽器不會允許沒有非常具體和明確的關於如何交換數據的合同。 [見CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing)。 –

+0

AJAX只是一個HTTP請求,就像在地址欄中鍵入URL並按回車鍵一樣。對於AJAX和Node.js沒有任何不安全的地方,你很困惑這兩者。跨域AJAX是這篇文章所指的。 – pixelfreak

0

我運行PHP和nodejs一起進行生產,它的安全性不低於任何其他CGI後端。沒有人提到的一件事是,Nginx目前還不支持WebSockets,所以如果要使用websockets支持PHP應用程序和nodejs應用程序,那麼將Nginx綁定到80端口不會起作用。

見我的答案在這裏爲我的解決方案:nginx vs node-http-proxy

編輯: 截至1.3.13版本,Nginx的支持網絡套接字。 Nginx現在已經收回了我的生產棧80端口的合法位置。

+0

這篇文章,http://webandphp.com/IntegratingNode.jswithPHP,如果你換了協議,還沒有測試過,websockets可以和Nginx一起使用! – Richard

+0

@Richard是的,1.3.13及更高版本現在支持websockets,因此我現在使用Nginx作爲Nodejs應用程序和PHP應用程序的反向代理。 – srquinn