我製作了一個頁面,用戶可以在textarea中插入一個查詢,當他們點擊提交按鈕時,它會生成一個填充了該查詢數據的表格。不允許用戶從查詢中編輯數據庫
現在我想確保用戶不能使用其他類型的查詢,例如:INSERT,DROP,ALTER,UPDATE,RENAME和其他所有可以編輯數據庫中表的數據。
我找不到任何好的例子。 (或沒有正確搜索)
這樣做的最佳方法是什麼?
我製作了一個頁面,用戶可以在textarea中插入一個查詢,當他們點擊提交按鈕時,它會生成一個填充了該查詢數據的表格。不允許用戶從查詢中編輯數據庫
現在我想確保用戶不能使用其他類型的查詢,例如:INSERT,DROP,ALTER,UPDATE,RENAME和其他所有可以編輯數據庫中表的數據。
我找不到任何好的例子。 (或沒有正確搜索)
這樣做的最佳方法是什麼?
如果使用MySQL並限制DML的dbuser,則可以使用GRANT
。我不知道確切的語法。或者您也可以通過regex
或stripos
爲此創建一個新用戶來驗證查詢。該用戶應該只有SELECT
訪問數據庫。
GRANT SELECT ON database_name.* TO 'someuser'@'somehost';
利用這種方法,你不必用正則表達式的混亂(除非你想客戶端驗證),這樣即使您的驗證失敗,數據庫本身會妥善處理的權限。
您的表單需要使用someuser
來連接並運行查詢,而不是應用程序其餘部分使用的用戶。
你有沒有考慮搜索單詞「insert」/「drop」/「alter」等,如果找到了,那麼只是給出一個錯誤信息? – 2014-09-11 11:46:31
您可以爲新的MySQL用戶設置所需的權限並使用該用戶連接到數據庫。無法繞過,因此它非常安全。 – 2014-09-11 11:47:21
你可以創建一個帶有選項的表單,當表單被提交時,它會創建查詢並執行它。別再擔心了。 – machineaddict 2014-09-11 11:52:39