我想在我的SQL中搜索特定模式,以便它只用SELECT啓動,而不是用INSERT,UPDATE,DELETE啓動。Jquery正則表達式
我怎樣才能實現這個使用JQuery,我想用JQuery來做一個不區分大小寫的字符串匹配。
編輯
我還要考慮子查詢也。
因此我的要求是查詢不應該在任何地方包含任何INSERT,UPDATE,DELETE語句。 它應該只包含SELECT statments
我想在我的SQL中搜索特定模式,以便它只用SELECT啓動,而不是用INSERT,UPDATE,DELETE啓動。Jquery正則表達式
我怎樣才能實現這個使用JQuery,我想用JQuery來做一個不區分大小寫的字符串匹配。
編輯
我還要考慮子查詢也。
因此我的要求是查詢不應該在任何地方包含任何INSERT,UPDATE,DELETE語句。 它應該只包含SELECT statments
我會用一個白名單爲,而不是一個黑名單:
function isValidQuery(str) {
return /^select\s+([a-z_*]+,?)+\s+from\s+[a-z_]+$/i.test(str);
}
這隻比賽查詢形式SELECT field, [field, ...] FROM table
。這也可以擴展爲允許某些種類的WHERE
或GROUP BY
說明符。如果這還不夠,你還可以使用更嚴格的黑名單:
function isValidQuery(str) {
if (/delete|update|insert|truncate|create|drop/i.test(str)) return false;
// possibly more excluding rules...
return true;
}
如果你想用這個來保護您的數據,我肯定不會依靠第二種方法,因爲它大概可以規避(你忘記了一個危險的命令,SQL走私......)很多更好的方法是創建一個專用數據庫用戶,該用戶只能通過此接口讀取要訪問的表。
謝謝Niklas ....這肯定有助於.. :) – Vivek 2012-02-02 11:09:12
您可以使用類似以下內容:
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
謝謝..這工作。但是談到Niklas問的問題,我該如何修改正則表達式,以便查詢不會包含UPDATE,DELETE,INSERT在sql中的任何位置。 它應該只包含SELECT語句。 – Vivek 2012-02-02 10:52:36
很高興幫助:-)我可能只是在'isSelect()'函數中添加額外的檢查。已經更新了我的答案。 – jabclab 2012-02-02 11:02:25
@jakeclarkson:如果OP想用這個保護數據,我認爲你的代碼不是一個好建議。例如,它允許使用'drop'或'truncate'語句,以及像'create table'這樣的建設性語句。即使將這些添加到黑名單中,也可能會被繞過(SQL走私等)。更好的建議是使用*白名單*,並(另外)使用DB內部權限機制來僅允許讀取某些表。 – 2012-02-02 11:06:02
僅供參考,正則表達式是javascript的一部分。這裏不需要jQuery。 – 2012-02-02 10:23:51
你能更具體嗎? jQuery是一個大型圖書館,正則表達式是一個廣泛的主題,「不區分大小寫」只是RegExp的一個選項。你遇到了什麼真正的問題? – 2012-02-02 10:24:12
好吧,但我怎麼能實現它或者使用Javscript或JQuery – Vivek 2012-02-02 10:24:41