2014-07-08 58 views
1

我創建了一個簡單的HTML/PHP頁面,僅用於獲取unsanitized用戶輸入。SQL Server:帶有隻讀用戶的unsanitized用戶輸入

它位於:http://109.201.140.29/mssql/

我這樣做只是爲了好玩,我用這個窗口服務器沒有別的當前。

當用戶只有(只讀)訪問數據庫test_db時是否有任何風險?

它還會將失敗/成功的請求,錯誤日誌的樣品(因爲你可以看到,DROP TABLE不工作):

[2014-07-08 14:27:41] (query) Execution of query: "DROP TABLE users;" Failed. 
    src IP: <snip> 
    err: SQLSTATE[42S02]: [Microsoft][SQL Server Native Client 11.0][SQL Server]Cannot drop the table 'users', because it does not exist or you do not have permission. 

從成功的查詢示例日誌:

[2014-07-08 14:17:38] (query) Executed: "select * from users;". 
    src IP: <snip>. 
    Returned rows: 100. 

[2014-07-08 14:17:45] (query) Executed: "select @@version;". 
    src IP: <snip>. 
    Returned rows: 1. 

[2014-07-08 14:19:12] (query) Executed: "SELECT * FROM information_schema.tables". 
    src IP: <snip>. 
    Returned rows: 1. 

簡單我想的問題;但這裏有風險嗎?除了用戶輸入作爲查詢的明顯缺陷。

用戶有我說的只讀訪問,並不是任何數據庫的所有者。

我問,因爲這是我的第一次使用SQL Server的經驗,但從我的測試中,至少查詢似乎只允許讀取(SELECT),這對於此目的而言是可以的。

隨意測試查詢當然 - 因爲可能有一些查詢可能,我不知道。

+0

'EXEC xp_dirtree'C:\''給了我一個結果....以及一半的結果 –

+0

是的,我在錯誤日誌中看到hehe,編輯:我也打印捕獲的異常,無論它失敗。因此,有一半的結果:) – dusz

+0

當然存在風險,攻擊者可以看到數據庫中包含的所有數據。更何況@ElectricLlama已經有了一個骯髒。 – esqew

回答

0

安全性建立於機密性,可用性和完整性之上。 保密性明顯受損,因爲您只需提供任何訪問權限。 Damien顯示可用性受損,還可以使用其他方法。 完整性是「只讀」權限實際上有助於保護的唯一內容,但也是有限的。 您的數據庫版本是Microsoft SQL Server 2012-11.0.2100.60,總是有新的攻擊可以提供全面的服務器接管,並且如果您直接訪問數據庫,攻擊者總是可以執行暴力攻擊來猜測和冒充另一個更強大的用戶甚至是管理員用戶(例如EXECUTE AS LOGIN ...)。 您永遠無法關閉所有潛在的漏洞,您絕不應允許直接訪問您的數據庫。