我想在我的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