2016-12-16 36 views
0

嗨安全意識的人,創建數據庫連接時硬編碼證書的風險是什麼?

我最近掃描我的靜態代碼分析和高苛刻度調查結果的一個工具的應用是用於創建連接的硬編碼的用戶名和密碼:

dm.getConnection(databaseUrl,"server","revres"); 

爲什麼掃描儀是否認爲這對應用程序是一種風險?我可以看到一些缺點,如不能輕易更改密碼(如果它被泄露)。理論上有人可以對二進制文件進行反向工程來學習證書。但我沒有看到將憑證存儲在配置文件中的優勢,它們很容易定位和讀取,除非它們已加密。如果我加密他們,我將解決與加密密鑰相同的問題...

有沒有更多的風險,我看不到?還是應該使用完全不同的方法? 非常感謝。

回答

-1

我認爲這取決於您的源代碼或編譯代碼的可訪問性/安全性。開發人員通常在他們的開發箱上有代碼副本,這些副本通常不像生產服務器那樣安全,因此更容易被黑客入侵。通常,在開發盒上配置測試用戶/ pw,在生產中,「真實」pw存儲在更安全的配置文件中。是的,如果有人入侵服務器,他們可以輕鬆獲得憑據,但這比在大多數情況下進入開發箱要困難得多。但就像我說的那樣。如果只有一個開發者,並且他們擁有一個超級安全的機器,並且他們的代碼回購也是超級安全的,那麼就沒有有效的區別。

+0

這幾乎是我在想什麼,但我想確認一下。這是一個只有我負責的小應用程序,所以我認爲風險並不高。當然,靜態代碼分析工具不能考慮開發團隊的規模或不同環境(我使用DEV,UAT,PROD)的安全級別等因素,因此嚴重性分類可能基於它的假設大型企業應用程序。 – Pepa

-1

我所要做的就是先向最終用戶詢問憑證,然後加密並將它們存儲在一個文件中。這樣,我不知道他們的連接細節和密碼作爲開發者。關鍵是哈希二進制,我通過戳ekstra字節存儲它。想要破解它的人應該找出使用的算法,密鑰和向量長度,它們的位置以及字節序列的始端位置以保持值。一個天才,誰也會逆向工程我的代碼,以獲得所有這些信息將闖入它(但它可能會更容易直接破解最終用戶的憑據)。

+0

我會問到downvoter的原因。所以不應該無理由地降低投票率。這就像沒有防守的執行,通常那些不明白是什麼意思的人會這樣做,只是因爲他們可以。 –

0

嵌入在代碼中的固定密碼對於每次安裝都是相同的,任何有權訪問源代碼或二進制文件(包括安裝介質)的人都可以訪問。

從文件中讀取的密碼對於每次安裝都可能不同,並且只有那些可以讀取密碼文件的人才知道。

通常情況下,您的安裝程序會爲每個站點生成一個唯一的密碼,並將其安全地寫入該文件以供您的應用程序讀取。 (通過「安全」,我的意思是使用O_CREAT|O_EXCL來防止符號鏈接攻擊,並在任何人打開它之前正確選擇文件位置和權限)。

0

這很有趣,我可以給你一個.Net應用程序的例子(因爲你沒有指定使用的運行環境/技術)。雖然我的猜測是Java?我希望這仍然是相關的,並幫助你。

我的主要建議是要閱讀這篇文章,並從那裏:Protecting Connection information - MSDN

這裏是一個頁面描述working with encrypted configuration files here

我已經看到了這個解決了這兩個使用加密的配置文件和Windows身份驗證。我認爲,在運行你的應用程序作爲將被授予訪問相關的存儲過程等用戶(儘量少,例如至少原理特權),此外文件夾的訪問等是一個很好的途徑。

我會建議使用這兩種技術,因爲這樣你可以給池IIS相關的本地文件夾的訪問並拆分出SQL用戶接入等。這也使得更好的審覈!

這取決於你的應用需要,但。最主要的原因,使通過配置文件或環境的用戶帳戶,我會說這個配置是這樣,當你來發布應用程序到生產,開發人員無需訪問生產用戶帳戶信息,而是可以直接與本地合作/系統測試/ UAT憑證。

當然,它們並未以純文本形式存儲在您的源代碼管理簽入中,如果您在像GIT這樣的私有分佈式網絡中託管,則可能意味着這可能會受到影響,並且黑客可以訪問憑據。

相關問題