2013-10-01 54 views
4

我正在構建一個相對簡單的程序來收集和分類用戶輸入的數據。我想用通過網絡瀏覽器的原因有兩個運行的本地服務器\:使用本地服務器爲程序提供基於瀏覽器的GUI會帶來哪些安全風險?

  1. HTML形式收集輸入我需要一個簡單而有效的手段。
  2. 我希望能夠運行程序脫機而無需管理涉及訪問遠程服務器的安全風險。

編輯:爲了澄清,我的意思是應用應該可以訪問只能從本地網絡而不是從互聯網

正如我一直在尋求對這一問題的信息,我遇到的一個或兩個的言論表明本地服務器都有自己的安全風險,但我不是對這些風險的性質和嚴重程度清楚。 (如果是相關的,我將使用SWI-Prolog來處理數據操作,我也計劃使用SWI-Prolog HTTP package作爲服務器,但是我願意重新考慮這個選擇,如果它變成了一個壞主意)

我有兩個問題:

  1. 什麼安全隱患並使用本地服務器用於此目的時,一個需要注意的? (注意:就我而言,該計劃可能會處理一些非常敏感的信息,所以在這個問題上我沒有任何鬆懈的餘地)。
  2. 如何減輕這些風險? (或者,我應該看看怎麼解決這個問題?)

我非常感謝任何和所有的幫助!

+1

如果您的用戶數量有限,則可以忽略我答案的最大部分。只是建議使用VPN。您的服務器將無法訪問世界,但具有密碼的用戶將能夠連接到您的本地網絡並使用您的服務器。 –

回答

2

任何解決方案都存在安全風險。您可以使用經過多年並且有一天會被黑客入侵的工具(來自我自己的經驗)。而且您可以爲安全解決方案付出很多,並且永遠不會被黑客入侵。所以,你需要將努力與影響相比較。

基本上,你需要保護4「門」在你的情況: 1.授權(密碼截取或者,例如不當餅乾,使用) 2. http協議 3.應用程序輸入 4.其他途徑訪問你的數據庫(不使用http,例如,通過密碼較弱的ssh端口,拿走你的電腦或硬盤等等。在某些情況下,你需要正確加密音量)

1和4不是專用於Prolog,而是4只是在本地服務器的情況下有一些具體的。

保護HTTP協議級別的手段不允許它可以接管你的SWI-Prolog的服務器控制請求。爲此,我建議安裝一些像nginx這樣的反向代理,它可以防止包括某種類型的DoS在內的攻擊。所以,瀏覽器會聯繫nginx,如果nginx是一個正確的http請求,nginx會將請求重定向到你的服務器。如果它具有相似的功能,您可以使用任何其他服務器而不是nginx。

您需要安裝適當的SSL密鑰,並允許SSL(HTTPS)在您的反向代理服務器。它不應該在你的swi-prolog服務器中。 Https將加密所有信息,並將通過http與swi-prolog進行通信。

想想授權。有很多方法可以很容易地打破。你需要學習這個話題,有很多信息。我認爲這是最重要的部分。

應用輸入的問題 - 法莫斯例子是「SQL注入」。研究例子。所有優秀的Web框架都有「入門」程序來清理所有可能的注入。取一個現有的代碼並用prolog重寫它。 此外,檢驗所有輸入字段具有非常長的字符串,不同字符集等

可以看到,安全性也不是那麼容易的,但你可以選擇與黑客的影響,考慮適當的努力。

另外,想想可能的攻擊者。如果有人非常感興趣,特別是要獲取您的信息,所有提及的方法都很好。但這可能是一種罕見的情況。大多數時候黑客只是掃描互聯網,並嘗試將已知的黑客應用到所有找到的服務器。在這種情況下,你最好的朋友應該是Honey-Pots和prolog本身,因爲黑客對swi-prolog內部的興趣的可能性非常低。 (黑客需要好好研究服務器代碼才能找到門)。

所以,我想你會發現足夠的方法來保護所有敏感數據。 但是,請不要將字典單詞和相同密碼組合的密碼用於一個目的,這是最重要的安全規則。出於同樣的原因,您不應該爲您的用戶提供所有信息的訪問權限,但應該保護應用級別的設計。

具體到本地服務器的情況下,是一個很好的防火牆,正確的網絡設置和encription硬盤分區中,如果您的本地服務器可以通過「黑客」竊取。

但是,如果你指的是應用程序應該可以訪問只能從你的本地網絡,而不是從互聯網你需要少得多的努力,主要是你需要檢查你的路由器/防火牆的設置,在我的列表中的第4門。

在一個情況下,你必須知道用戶的數量非常有限,你可以只建議他們使用VPN並不能保護你的服務器中的「全局」訪問的情況。

+0

非常感謝*非常詳盡的答案!在我瞭解與這些安全問題有關的基本概念時,我試圖找出許多缺陷是非常有幫助的。我相信,通過這個方向,我現在可以開始探索你列出的各個領域。我也知道,我知道的比我想象的還要少。 *我確實意味着應用程序只能在本地網絡中訪問* - 在單個機器上 - (也許分發Prolog應用程序供其他人使用),但我甚至不知道足以說明清楚! –

+0

你以後的補充是一個很大的解脫;因爲當我第一次讀到你的答案時,我認爲我完全失去了聯盟,並且我正要放棄整個方法,或許試圖建立一個本地gui。非常感謝! –

1

我覺得SWI_Prolog HTTP包是一個很好的選擇。 Jan Wielemaker在保證安全性和可擴展性方面付出了很多努力。

我不認爲你需要擔心SQL注入,確實是怪依靠SQL時,你有你的手指Prolog的力量......

當然,您需要妥善管理HTTP在您的服務器訪問... 就在今天上午出現了SWI-Prolog的郵件列表an interesting post,這個話題:阿內·奧格本分享了她的經驗......

+0

我很高興聽到SWI-Prolog包的認可。我很喜歡玩這個遊戲,但我對這些事情一無所知,很高興知道我不是一個傻瓜差事。我花了很多時間在Anne Ogborn的教程中工作,並感謝她的工作。感謝您的郵件列表鏈接!除了警示故事外,看到她利用這種情況很有意思。 –

+0

但我們需要擔心「Prolog注射」。 順便說一句,你建議用於永久存儲的SQL DB的替代方案? –

+0

@SergeiLodyagin:Prolog是一種關係語言。而SWI-Prolog有大量的存儲選擇。例如,我使用QLF進行了實驗 - Wordnet(〜300K記錄IIRC)可以在玩具電腦上幾秒鐘內加載。但是SWI-Prolog的重點在於RDF存儲。 – CapelliC

2

我想指出的是,我的職位是有關安全問題:使用apache 中的端口轉發來訪問prolog服務器。

而且我知道基於SWI-Prolog的HTTP框架網站上成功的序言注射DOS攻擊。我不相信網站的作者想要公開的細節,但是這種可能性肯定是真實的。 顯然這個攻擊矢量只有在網站評估Turing完整代碼(或者它不能證明的代碼將終止)時纔有可能。

一個簡單的安全預防措施是檢查Request對象並拒絕來自除localhost之外的任何請求。

我想指出,pldoc服務器只在本地主機上默認響應。 - Anne Ogborn

相關問題