2015-11-25 38 views
0

我發現很多Web服務都提供對某些關係數據的CRUD訪問。例如我有概念,如users,profileshosts,每個都有屬性,它們之間的關係(usersprofiles,hosts屬於users等)。接受SQL作爲輸入的Web服務

我在想,指定你想要什麼的最好方法就是在SQL中表達它。

select name, profile.name, profile.id from users, profiles order by users.date; 

什麼是一種好的/可行的/安全的方法來使Web服務接受輸入爲SQL查詢?

是否有某種可重用的SQL解析器/引擎,我可以重複使用?

編輯:我不是說允許人們直接訪問數據庫。我的意思是允許他們表達他們的需求(「我希望所有用戶的名字,以及他們相應的個人資料的名稱,其創建日期,以及關聯主機的數量,全部按上次修改日期排序」) SQL。這並不意味着Web服務必須將SQL查詢逐字轉發到數據庫。

感謝

+0

在Web服務中寫入sql並傳遞參數。如果有人有臨時選擇查詢,請使用其他應用程序。 –

+0

發送一個完整的SQL查詢作爲輸入到Web服務看起來像是一個安全噩夢,等待發生.......想象一下攻擊者可以做什麼! **不要這樣做!**它聽起來*起初真的很聰明,很誘人 - 但是有一個單獨的服務層,它有自己的限制和檢查是一件好事** - 不要把它打破允許調用者向您發送任意SQL語句! –

回答

3

這聽起來像一個非常糟糕的主意。首先,您打開Web服務界面以支持SQL查詢,並且在下一步中,您需要過濾掉所有可能有害的內容 - 這在SQL的上下文中很多。

請不要這樣做。定義你的客戶需要什麼操作並支持這些查詢。通過這種方法,您可以在服務器端定義SQL查詢,並只需從客戶端傳入參數。使用輸入驗證和準備語句來避免安全問題。

0

如前所述,將SQL注入Web服務是一個安全問題。但是,如果你是真的,真的需要這種靈活性,你不應該害怕編寫你自己的翻譯的努力。然後你就可以將那些可能會對你的應用程序造成傷害的事情剪掉。