我正在创建一个站点,其中用户不幸地必须提供在MySQL WHERE子句中使用的正则表达式.当然,我必须验证用户输入以防止SQL注入.该网站是用PHP制作的,我使用以下正则表达式检查我的正则表达式:
/^([^\\\\\']|\\\.)*$/
由于PHP处理正则表达式的方式,这是双重转义.它应该工作的方式是只匹配安全的正则表达式,而没有未转义的单引号.但大多数是自学成才,我想知道这是否是一种安全的方式.
如果使用预准备语句,则无法进行SQL注入.您应该始终使用预准备语句.
关于昂贵的正则表达,Roborg提出了一个很好的观点.