2012-02-02 95 views
0

我想在我的SQL中搜索特定模式,以便它只用SELECT啓動,而不是用INSERT,UPDATE,DELETE啓動。Jquery正則表達式

我怎樣才能實現這個使用JQuery,我想用JQuery來做一個不區分大小寫的字符串匹配。

編輯

我還要考慮子查詢也。

因此我的要求是查詢不應該在任何地方包含任何INSERT,UPDATE,DELETE語句。 它應該只包含SELECT statments

+0

僅供參考,正則表達式是javascript的一部分。這裏不需要jQuery。 – 2012-02-02 10:23:51

+1

你能更具體嗎? jQuery是一個大型圖書館,正則表達式是一個廣泛的主題,「不區分大小寫」只是RegExp的一個選項。你遇到了什麼真正的問題? – 2012-02-02 10:24:12

+0

好吧,但我怎麼能實現它或者使用Javscript或JQuery – Vivek 2012-02-02 10:24:41

回答

1

我會用一個白名單爲,而不是一個黑名單:

function isValidQuery(str) { 
    return /^select\s+([a-z_*]+,?)+\s+from\s+[a-z_]+$/i.test(str); 
} 

這隻比賽查詢形式SELECT field, [field, ...] FROM table。這也可以擴展爲允許某些種類的WHEREGROUP BY說明符。如果這還不夠,你還可以使用更嚴格的黑名單:

function isValidQuery(str) { 
    if (/delete|update|insert|truncate|create|drop/i.test(str)) return false; 
    // possibly more excluding rules... 
    return true; 
} 

如果你想用這個來保護您的數據,我肯定不會依靠第二種方法,因爲它大概可以規避(你忘記了一個危險的命令,SQL走私......)很多更好的方法是創建一個專用數據庫用戶,該用戶只能通過此接口讀取要訪問的表。

+0

謝謝Niklas ....這肯定有助於.. :) – Vivek 2012-02-02 11:09:12

1

您可以使用類似以下內容:

function isSelect(str) { 
    return /^select/i.test(str) && !/insert|update|delete.*/.test(str); 
} 

isSelect("select * from foo"); // true 
isSelect("SELECT id, name from foo"); // true 
isSelect("update ..."); // false 
isSelect("DELETE ..."); // false 
+0

謝謝..這工作。但是談到Niklas問的問題,我該如何修改正則表達式,以便查詢不會包含UPDATE,DELETE,INSERT在sql中的任何位置。 它應該只包含SELECT語句。 – Vivek 2012-02-02 10:52:36

+1

很高興幫助:-)我可能只是在'isSelect()'函數中添加額外的檢查。已經更新了我的答案。 – jabclab 2012-02-02 11:02:25

+1

@jakeclarkson:如果OP想用這個保護數據,我認爲你的代碼不是一個好建議。例如,它允許使用'drop'或'truncate'語句,以及像'create table'這樣的建設性語句。即使將這些添加到黑名單中,也可能會被繞過(SQL走私等)。更好的建議是使用*白名單*,並(另外)使用DB內部權限機制來僅允許讀取某些表。 – 2012-02-02 11:06:02