最近一个业务场景,需要拼接SQL进行复杂查询,且给用户提供模糊搜索和过滤等功能,此时就存在SQL注入的风险。

除开Rails本身提供的防SQL注入的方式,还可以用正则检查用户输入的文本是否合法。

  DETECT_SQL_INJECTION_REGEX = /('(''|[^'])*')|(;)|(\b(ALTER|CREATE|DELETE|DROP|EXEC(UTE){0,1}|INSERT( +INTO){0,1}|MERGE|SELECT|UPDATE|UNION( +ALL){0,1})\b)/i

上述正则,匹配了SQL中的关键字;当搜索字符串中包含这些特殊字符时,就存在注入风险,建议屏蔽。

FYI: