我想在我的 SQL 中搜索特定模式,以便它仅以 SELECT 开头,而不以 INSERT 、 UPDATE 、 DELETE 开头。
我如何使用 JQuery 来实现这一点,我想使用 JQuery 来对字符串进行不区分大小写的匹配。
编辑
我也想考虑子查询。
因此我的要求是查询不应在任何地方包含任何 INSERT 、 UPDATE 、 DELETE 语句。 它应该只包含 SELECT 语句
最佳答案
我将使用白名单,而不是黑名单:
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走私,......)很多 更好的方法是创建一个专用数据库用户,该用户仅对您希望通过此接口(interface)可用的表具有读取访问权限。
关于javascript - Jquery 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9110622/