2015-04-17 24 views
2

根據this question看起來強烈建議使用JavaScript連接SQL數據庫,並且存在安全問題。爲什麼從javascript連接SQL數據庫是一種不好的做法?

您能否指定究竟是什麼問題,爲什麼?

+4

如果它的JavaScript在瀏覽器是一個壞主意,因爲:查看源代碼 - 看到連接信息或查詢 - 創建自己的查詢,刪除所有數據 – epascarello

+0

如果SQL語句在客戶端,您的數據庫將向任何選擇向您的DB發送任何SQL語句的人開放。 – adeneo

+0

_「強烈建議從javascript連接sql數據庫」_您的意思是:強烈建議不要使用? –

回答

4
delete all_users 

不,真的!你真的想讓任何人訪問你的數據庫,並按他們的喜好進行編輯嗎?如果您只允許任何人訪問,則無法以任何方式保護訪問權限!

您的用戶名和密碼將被公開,以便每個人都可以更改您的數據庫。 JavaScript不安全的保存密碼!

+0

無法從sqlcmd運行它嗎? – Yakov

+0

從網絡上,我希望不是。否則你應該檢查你的DMZ,就像***現在***。 –

+1

@Yakov - 你需要一個DB uname/pwd來訪問數據庫。您通常將其保存在中間件上。但是如果你的JavaScript訪問數據庫,你需要在客戶端使用你的uname/pwd。因此,即使您的防火牆允許數據庫訪問,這些信用也需要保持私密。 –

1

你能說:JavaScript執行在哪裏? 如果你說:用戶的瀏覽器,你的回答是正確的。 所以你已經發送了連接字符串的代碼,所有的用戶,所有的worls。許多人不知道如何使用它,但很多人都知道它很好。他們有鎖和鑰匙。 希望它對你有所幫助。

3

讓我們誠實地打破這這裏..

所以你需要數據的應用程序。這些數據需要來自某個地方。您可以從SQL數據庫獲取這些數據。

現在,雖然SQL具有基於權限的訪問等,爲了正確地保護某些字面上「開放的」東西,您必須將其鎖定在非常核心的位置。這對於SQL來說並不是特別容易(與其他技術相比),並且可以爲您打開幾件事情。

SQL服務器被設計爲處於只有服務器端代碼將與之通信的封閉環境中。要從中獲取數據,您需要用戶名/密碼。所以這將不得不存儲在客戶端。所以你現在可以得到你的數據。你只能得到你需要的數據。但是什麼阻止了任何真實世界的用戶試圖獲得更多。那麼除非你鎖定每張桌子和每一個存儲過程以及所有其他的東西 - 什麼也沒有。另外,什麼阻止了用戶只是浸出整個數據庫?從我對SQL的瞭解你不能限制用戶獲取一定數量的行。

什麼是代理服務或Web服務,或任何設計爲公衆使用的前端服務,都會爲您提供某種方式來過濾或設置可訪問內容的限制。如果您的應用程序只需要某些數據,那麼該服務將只提供該數據。該呼叫是固定的 - getUserProfile()。服務器已經知道當前用戶,因此它只會獲取該用戶的詳細信息。如果有getUserProfile(65),你怎麼知道用戶'65'實際上是否是請求它的人?

SQL不理解cookies或會話變量的複雜性,它只是說'嗨,有一個有效的用戶名和密碼,給他們所有他們有權訪問的東西!'它的設計目的不是僅基於用戶返回一行。

所以總結一下,你不能控制用戶可以訪問多少數據,因此你使用了一個理解用戶應該看到的Web服務,並且只提供這些信息。

...這只是從數據庫中讀取 - 寫作是一個全新的痛苦和痛苦。

TL; DR這是一個壞主意

相關問題