我想在我的SQL中搜索一个特定的模式,这样它只能用SELECT启动而不能用INSERT,UPDATE,DELETE启动。
我如何使用JQuery实现这一点,我想使用JQuery对字符串进行不区分大小写的匹配。
修改
我也想考虑子查询。
因此我的要求是查询不应该在任何地方包含任何INSERT,UPDATE,DELETE语句。 它应该只包含SELECT语句
答案 0 :(得分: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
答案 1 :(得分:1)
我将使用白名单,而不是黑名单:
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走私,......)A 很多< / em>更好的方法是创建一个专用数据库用户,该用户只能通过此接口对您希望可用的表具有读访问权。