2013-03-16 24 views
1

快速和骯髒:我想檢查一個特定的行是否已經存在只使用INSERT權限。檢查具有有限(無SELECT)權限的重複行

說明
爲了安全起見,我將數據庫帳戶限制爲INSERT權限。我意識到在mysqli_real_escape_string之後還有其他的步驟,但是作爲PHP和MySQL的新手,我認爲這是阻止注入的最佳途徑。

提交後,表單會進行驗證檢查並嘗試創建該行,並通過或捕獲1062錯誤並表示用戶名已存在。

我現在想要使用相同的DB帳戶實現搶先式AJAX調用。我想發佈一個虛擬更新語句(不作任何改變)來檢查重複,但顯然沒有SELECT權限就失敗了。選擇權是我試圖避免的主要問題;這是天真的,什麼是適當的方式去做這件事?

+0

的*正確*的方式[防止SQL注入(HTTP:// stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php)是使用佔位符。這很簡單,它的工作原理。雖然限制訪問是一個額外的層,但只要正確使用基本的測試訪問模式(即佔位符),並且緩解了許多潛在問題。現在,人們仍然需要正確使用數據(例如,編碼JSON或HTML輸出),但這不是「SQL注入」。 – 2013-03-16 02:55:13

+0

另外,我不明白給INSERT(沒有SELECT)如何防止SQL注入的一般情況,即使它可能能夠防止一些直接查詢能力..如果改變模式的能力沒有被鎖定爲好? – 2013-03-16 02:59:50

+0

我的想法是在注入的情況下,他們可以做的最糟糕的事情就是創建新用戶。爲了澄清,數據庫用戶只具有INSERT權限。 – Gary 2013-03-16 03:01:39

回答