codeigniter
Защита веб-приложения
Поиск…
Вступление
Помните, что CodeIgniter - это платформа разработки. Он не стремится обеспечить безопасность приложения. Он просто дает вам инструменты для этого. Если вы посмотрите на страницу безопасности CI, довольно ясно, что они ожидают, что разработчик поймет Application Security и внедрит ее в свое приложение.
Если безопасность WebApp относительно новая для вас, я бы начал с OWASP. Возможно, было бы полезно взглянуть на другие структуры, такие как Zend или Cake, которые, как я полагаю, делают больше авансовых вещей
Синтаксис
- $ freshdata = $ this-> security-> xss_clean ($ user_input_data);
параметры
массив пользовательского ввода | пустой |
---|---|
вставить массив пользовательского ввода в xss_filter($array of user input) | пустой |
Профилактика XSS
XSS означает межсайтовый скриптинг. CodeIgniter поставляется с защитой от фильтрации XSS. Этот фильтр предотвратит любой вредоносный код JavaScript или любой другой код, который пытается захватить файл cookie и совершит вредоносную деятельность. Чтобы фильтровать данные через фильтр XSS, используйте метод xss_clean (), как показано ниже.
$data = $this->security->xss_clean($data);
Вы должны использовать эту функцию только при отправке данных. Дополнительный второй параметр Boolean также может использоваться для проверки файла изображения для атаки XSS. Это полезно для загрузки файлов. Если его значение истинно, значит, изображение безопасно, а не иначе.
Предотвращение инъекций SQL
SQL-инъекция - это атака, сделанная в запросе базы данных. В PHP мы используем функцию mysql_real_escape_string (), чтобы предотвратить это вместе с другими методами, но CodeIgniter предоставляет встроенные функции и библиотеки для предотвращения этого.
Мы можем предотвратить SQL Injection в CodeIgniter следующими тремя способами:
- Выполнение запросов
- Купирование запросов
- Класс активной записи
Выполнение запросов
<?php
$username = $this->input->post('username');
$query = 'SELECT * FROM subscribers_tbl WHERE user_name = '.
$this->db->escape($email);
$this->db->query($query);
?>
$this->db->escape()
автоматически добавляет одинарные кавычки вокруг данных и определяет тип данных, чтобы он мог избежать только строковых данных.
Купирование запросов
<?php
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
?>
В приведенном выше примере знак вопроса (?) Будет заменен на массив во втором параметре функции query()
. Основным преимуществом построения запроса таким образом является то, что значения автоматически экранируются, что создает безопасные запросы. Двигатель CodeIgniter делает это автоматически, поэтому вам не нужно его запоминать.
Класс активной записи
<?php
$this->db->get_where('subscribers_tbl',array('status'=> active','email' => '[email protected]'));
?>
Используя активные записи, синтаксис запроса генерируется каждым адаптером базы данных. Он также обеспечивает более безопасные запросы, поскольку значения автоматически исчезают.
Скрытие ошибок PHP
В производственной среде мы часто не хотим отображать пользователям сообщение об ошибке. Хорошо, если он включен в среде разработки для целей отладки. Эти сообщения об ошибках могут содержать некоторую информацию, которую мы не должны показывать пользователям сайта по соображениям безопасности.
Существуют три файла CodeIgniter, связанные с ошибками. Уровень отчетности об ошибках PHP
В разных средах требуются разные уровни сообщений об ошибках. По умолчанию при разработке будут отображаться ошибки, но тестирование и прямая пряжка будут скрыты. В корневом каталоге CodeIgniter есть файл index.php, который используется для этой цели. Если мы передадим значение 0 в качестве аргумента функции error_reporting (), это скроет все ошибки.
Предотвращение CSRF
CSRF означает подделку запросов на межсайтовый запрос. Вы можете предотвратить эту атаку, включив опцию в файл application / config / config.php, как показано ниже.
$config['csrf_protection'] = TRUE;
Когда вы создаете форму с помощью функции form_open()
, она автоматически вставляет маркер CSRF в скрытое поле. Вы также можете вручную добавить токен CSRF с помощью функции get_csrf_token_name()
и get_csrf_hash()
. Как показывают их имена, get_csrf_token_name()
вернет имя токена CSRF, а get_csrf_hash()
вернет хэш.
Маркер CSRF может быть регенерирован каждый раз для подачи, или вы также можете сохранить его на протяжении всего срока действия файла cookie CSRF. Настройка параметра конфигурации «csrf_regenerate» заставит регенерировать токен, как показано ниже.
$config['csrf_regenerate'] = TRUE;
Вы можете переадресовывать URL-адреса из CSRF-защиты, устанавливая для них совпадения в массиве конфигурации, используя ключ «csrf_exclude_uris», как показано ниже. Вы также можете использовать регулярные выражения.
$config['csrf_exclude_uris'] = array('api/person/add');
Удалить данные о злоупотреблении с пользовательского ввода
// XSS Filtering
$data = array(
'name'=> '<script>Abuse Data</script>'
);
$data = $this->security->xss_clean($data); // Clean Data
// Escaping Queries
<?php $username = $this->input->post('username'); $query = 'SELECT * FROM subscribers_tbl WHERE user_name = '. $this->db->escape($email); $this->db->query($query); ?>
Профилактика XSS при пользовательском вводе
Не полагайтесь на какой-либо пользовательский ввод. пользователь вводит все как <script>
или любое javascript alert();
поэтому мы должны предотвратить, что все данные не будут запущены в нашем браузере. поэтому мы должны использовать метод предотвращения xss, чтобы ограничить наши защищенные данные хранящимися в хакерской руке, а также ответственность разработчика за проверку входных данных пользователя и устранение ошибки программным путем.
поэтому, проверьте это пример предотвращения xss в CodeIgniter.
$data = array(
'name' => "<script>alert('abc')</script>",
'email' => "[email protected]"
);
var_dump($data);
// Print array without xss cleaning/xss filtering
array(2) { ["name"]=> string(29) "" ["email"]=> string(19) "[email protected]" } // Result with alert
// now print data after xss filtering
$data = $this->security->xss_clean($data);
var_dump($data);
//Print array without xss cleaning/xss filtering
array(2) { ["name"]=> string(38) "[removed]alert('abc')[removed]" ["email"]=> string(19) "[email protected]" } // Result Without alert
поэтому после добавления xss_filtering у нас нет проблем с запуском какого-либо кода злоупотребления, которое вводит пользователь. и CodeIgniter заменяют этот тег злоупотребления ключевым словом [removed]
.