В CodeIgniter: есть 2 действия для предотвращения SQL-инъекций.Для новичков в веб-программировании - еще одна дыра в безопасности в веб-программировании, которая может быть фатальной, поскольку может раскрыть вашу внутреннюю сторону базы данных приложения, - это SQL-инъекция.
И, к счастью, Codeigniter имеет возможностьиметь дело с этим.Но, к сожалению, многие из программистов CI, с которыми я сотрудничал (и даже вы), забыли (или могли бы) забыть об этом двух действиях, чтобы предотвратить любые обстоятельства внедрения SQL.
Придерживайтесь возможности ActiveRecord Первое, что не следует делать ни при каких обстоятельствахиметь дело с запросом данных с помощью полного запроса, подобного следующему:
$this->db->query("select * from users where user=$user and password=$password")
Вы не знаете, что именно внутри переменной $ user или $ password , когда речь идет о пользователе, который будет делать это намереннонеправильная вещь.Даже дезинфицирующее средство XSS не будет иметь дело с тем, кто вводит в него комбинацию кавычки, точки с запятой или тире.Таким образом, в этом случае вам нужно изучить эту Active Record, потому что она имеет функцию ввода дезинфицирующего средства, предназначенную для предотвращения SQL-инъекций.И не волнуйтесь, он поддерживает такие цепочки функций, как это:
$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);
$query = $this->db->get();
Но помните, что это не сработает, если вы все равно будете комбинировать обычную (частично) функцию запроса внутри функции активной записи, как эта:
$query = $this->db->where("title LIKE '%$input%'");
Что на самом деле можно изменить следующим образом.
$query = $this->db->like("title", $input);
Суть в том, чтобы использовать каждую битовую возможность активной записи CodeIgniter и не связываться с ней.
Но если это не сработает, есть альтернатива. Если у вас очень длинный запрос и вы не удосужились преобразовать его в стиль Active Record, вы можете санировать ввод вручную, используя эту функцию:
$sanitised_title = $this->db->escape($title);
// Для использования внутри запроса LIKE
$sanitised_title = $this->db->escape_like_str($title);
И вы можете безопасно объединить очищенные / экранированные входные данные внутри запроса.