CodeIgniter SQL Escapeing Regexp Query - PullRequest
0 голосов
/ 15 мая 2018

Я использую CodeIgniter для запроса базы данных SQL. Мне нужно использовать REGEXP в предложении where, и я прочитал, что это можно сделать с помощью CodeIgniter Active Record, но я не могу заставить его работать. Даже в примерах я видел активную запись $ this-> db-> where () со значением false в качестве 3-го параметра, что означает, что данные не экранированы. Решение, с которым я пошел, просто что-то вроде

$this->db->query("SELECT column FROM table WHERE column REGEXP 'pattern'");

Проблема в том, что шаблон содержит некоторый пользовательский ввод, например, если кто-то выполнил поиск в БД с фразой "найди меня", шаблон будет выглядеть примерно так:

"find[\s\t\n]*me"

Возможен ввод вредоносного кода вместо слов "найди меня". Как я могу избежать этой строки? Я пробовал

$this->db->escape( "find[\s\t\n]*me" );

, которая выдает ошибку, потому что все обратные слэши экранированы, чего я не хочу. Я пробовал

$a = $this->db->escape( "find" );
$b = $this->db->escape( "me" )
$pattern = $a . "[\s\n\t]*" . $b;
$this->db->query( "SELECT column FROM table WHERE column REGEXP $pattern");

но это также дает ошибку. Мне даже нужно беспокоиться о том, чтобы избежать этого, или мне, возможно, нужно провести некоторую проверку на стороне JS, чтобы убедиться, что вместо этого нет злонамеренной вставки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...