美好的一天。我正在使用以下正则表达式来限制用户在MySQL查询中添加“坏”内容。
$regex = "/\s+where(?:\s+([a-z]\w*\.?\w*)\s*=\s*(?!\1)\'?\w*\'?(?:\s*and)?)+\s*(?:order\s+by|limit|$)/uix";
事情是,在尝试以下查询时 - 它仍匹配:
$query = "UPDATE test set is_active = 1 where id = id ";
var_dump(preg_match($regex, $query));die;
//int(1)
更奇怪的是,我尝试使用this,this和regexr.com等在线工具测试和调试此正则表达式,并且正则表达式与查询不匹配。 我错过了一些旗帜或设置或什么?
编辑:没有正确地逃避\ 1因为使用双引号。谢谢你从regex101聊天金鱼:)