簡體   English   中英

asp.net,c#,用戶提供連接字符串和查詢

[英]asp.net, c#, User provided Connection string and Query

我們正在嘗試創建一個asp.net頁面,使我們的用戶能夠將信息直接從他們自己的數據庫提取到我們的網站。 用戶將有能力提供:

  • 主機名,端口,數據庫名稱,用戶名,密碼和查詢。

我對此有一些嚴重的安全問題,並想知道如何保護此頁面,以便我們阻止用戶指向localhost數據庫或其他類型的黑客,這些黑客可以使他們能夠訪問我們的數據庫。 任何人都可以建議嗎?

我們正在使用SqlConnectionStringBuilder來構建與用戶數據庫的連接,並進行一些簡單的檢查以確保主機不能是“localhost”或指向我們服務器的其他地址。 我覺得這樣做會留下潛在的安全漏洞。

此外,還會針對某些不應允許的關鍵字檢查它們提供的查詢。 同樣,我認為如果沒有正確實施,這將留下很多開放。 (我們基本上希望它們只能從自己的DB中進行SELECT)。

最后,我們使用用戶的查詢執行EXEC sp_executesql。

我很想聽聽其他人如何處理這個問題? Klipfolio是一個具有相似類型功能的組織,所以如果有人知道他們如何解決這個問題,那真是棒極了!

謝謝!

在不了解您所處情況的所有細節的情況下,我認為您的方法不一定是最好的。 “通常”您的數據庫服務器不會暴露給全世界,它位於防火牆后面,並且不允許來自外部世界的直接連接。 將使用您的網頁的人可能也將他們的數據庫放在防火牆后面,因此,即使沒有嘗試做任何惡意的事情,您的網絡服務器將無法直接連接到他們的數據庫服務器,因為它可能在其后面自己的防火牆 他們必須要將它暴露給世界,要么知道服務器的IP地址,以便在防火牆中挖出一個洞以允許服務器連接。

每當我允許客戶端將數據上傳到我的服務器時,它都是通過文本或csv文件或Excel文件。 這使您可以解決客戶端上的任何防火牆問題。 現在您需要擔心數據中的SQL注入攻擊。 因此,有兩件事要做:首先確保在執行INSERT或UPDATE時使用參數,第二個是確保執行上載的進程對數據庫具有最低權限。

如果您必須直接連接到客戶端的數據庫,那么我會執行以下操作來增強安全性。

首先是將主機名解析為ip地址。

IPAddress[] addresslist = Dns.GetHostAddresses(hostname);

然后檢查地址列表中他們未解析的結果到任何私有地址,因為在任何情況下這些都無法連接到客戶端。

10.0.0.0至10.255.255.255。 172.16.0.0至172.31.255.255。 192.168.0.0到192.168.255.255。

還要確保該地址無法解析為您自己的公共地址。

第二件事至少只是因為這個功能不使用可信連接。 而是使用用戶名/密碼並在數據庫上分配該用戶的安全權限,以盡可能完成上傳數據的任務。 並且在導入數據時仍然使用參數化調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM