CodeIgniter - Bảo mật
Phòng chống XSS
XSS có nghĩa là kịch bản trang web chéo. CodeIgniter đi kèm với bảo mật lọc XSS. Bộ lọc này sẽ ngăn chặn bất kỳ mã JavaScript độc hại nào hoặc bất kỳ mã nào khác cố gắng chiếm đoạt cookie và thực hiện các hoạt động độc hại. Để lọc dữ liệu qua bộ lọc XSS, hãy sử dụngxss_clean() như hình dưới đây.
$data = $this->security->xss_clean($data);
Bạn chỉ nên sử dụng chức năng này khi bạn đang gửi dữ liệu. Tham số Boolean thứ hai tùy chọn cũng có thể được sử dụng để kiểm tra tệp hình ảnh cho cuộc tấn công XSS. Điều này rất hữu ích cho cơ sở tải lên tệp. Nếu giá trị của nó là true, có nghĩa là hình ảnh an toàn và không phải là ngược lại.
SQL Injection Prevention
SQL injection là một cuộc tấn công được thực hiện trên truy vấn cơ sở dữ liệu. Trong PHP, chúng tôi đang sử dụngmysql_real_escape_string() chức năng ngăn chặn điều này cùng với các kỹ thuật khác nhưng CodeIgniter cung cấp các chức năng và thư viện có sẵn để ngăn chặn điều này.
Chúng ta có thể ngăn SQL Injection trong CodeIgniter theo ba cách sau:
- Thoát truy vấn
- Truy vấn Biding
- Lớp ghi hoạt động
Thoát truy vấn
<?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() chức năng tự động thêm dấu ngoặc kép xung quanh dữ liệu và xác định kiểu dữ liệu để nó chỉ có thể thoát khỏi dữ liệu chuỗi.
Truy vấn Biding
<?php
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
$this->db->query($sql, array(3, 'live', 'Rick'));
?>
Trong ví dụ trên, dấu hỏi (?) Sẽ được thay thế bằng mảng trong tham số thứ hai của hàm query (). Ưu điểm chính của việc xây dựng truy vấn theo cách này là các giá trị được thoát tự động, tạo ra các truy vấn an toàn. Công cụ CodeIgniter tự động làm điều đó cho bạn, vì vậy bạn không cần phải nhớ nó.
Lớp ghi hoạt động
<?php
$this->db->get_where('subscribers_tbl',array
('status'=> active','email' => '[email protected]'));
?>
Sử dụng các bản ghi đang hoạt động, cú pháp truy vấn được tạo bởi mỗi bộ điều hợp cơ sở dữ liệu. Nó cũng cho phép các truy vấn an toàn hơn, vì các giá trị tự động thoát.
Ẩn lỗi PHP
Trong môi trường sản xuất, chúng tôi thường không muốn hiển thị bất kỳ thông báo lỗi nào cho người dùng. Sẽ rất tốt nếu nó được kích hoạt trong môi trường phát triển cho mục đích gỡ lỗi. Các thông báo lỗi này có thể chứa một số thông tin mà chúng tôi không nên hiển thị cho người dùng trang web vì lý do bảo mật.
Có ba tệp CodeIgniter liên quan đến lỗi.
Mức báo cáo lỗi PHP
Môi trường khác nhau yêu cầu các mức báo cáo lỗi khác nhau. Theo mặc định, phát triển sẽ hiển thị lỗi nhưng thử nghiệm và phát trực tiếp sẽ ẩn chúng. Có một tệp được gọi làindex.phptrong thư mục gốc của CodeIgniter, được sử dụng cho mục đích này. Nếu chúng ta chuyển 0 làm đối số choerror_reporting() thì chức năng đó sẽ ẩn tất cả các lỗi.
Lỗi cơ sở dữ liệu
Ngay cả khi bạn đã tắt các lỗi PHP, lỗi MySQL vẫn mở. Bạn có thể tắt tính năng này trongapplication/config/database.php. Đặtdb_debug tùy chọn trong $db mảng đến FALSE như hình bên dưới.
$db['default']['db_debug'] = FALSE;
Nhật ký lỗi
Một cách khác là chuyển các lỗi sang tệp nhật ký. Vì vậy, nó sẽ không được hiển thị cho người dùng trên trang web. Đơn giản, hãy đặtlog_threshold giá trị trong $config mảng đến 1 trong application/cofig/config.php tập tin như hình dưới đây.
$config['log_threshold'] = 1;
Phòng chống CSRF
CSRF là viết tắt của từ giả mạo yêu cầu trên nhiều trang web. Bạn có thể ngăn chặn cuộc tấn công này bằng cách bật nó trongapplication/config/config.php tập tin như hình dưới đây.
$config['csrf_protection'] = TRUE;
Khi bạn đang tạo biểu mẫu bằng cách sử dụng form_open(), nó sẽ tự động chèn CSRF dưới dạng trường ẩn. Bạn cũng có thể thêm CSRF theo cách thủ công bằng cách sử dụngget_csrf_token_name() và get_csrf_hash()chức năng. Cácget_csrf_token_name() hàm sẽ trả về tên của CSRF và get_csrf_hash() sẽ trả về giá trị băm của CSRF.
Mã thông báo CSRF có thể được tạo lại mọi lúc để gửi hoặc bạn cũng có thể giữ nguyên mã này trong suốt vòng đời của cookie CSRF. Bằng cách đặt giá trịTRUE, trong mảng cấu hình với khóa ‘csrf_regenerate’ sẽ tạo lại mã thông báo như hình dưới đây.
$config['csrf_regenerate'] = TRUE;
Bạn cũng có thể đưa các URL vào danh sách trắng khỏi tính năng bảo vệ CSRF bằng cách đặt nó trong mảng cấu hình bằng cách sử dụng khóa ‘csrf_exclude_uris’như hình bên dưới. Bạn cũng có thể sử dụng biểu thức chính quy.
$config['csrf_exclude_uris'] = array('api/person/add');
Xử lý mật khẩu
Nhiều nhà phát triển không biết cách xử lý mật khẩu trong các ứng dụng web, đó có lẽ là lý do tại sao nhiều tin tặc nhận thấy rất dễ dàng để xâm nhập vào hệ thống. Bạn nên ghi nhớ những điểm sau khi xử lý mật khẩu:
KHÔNG lưu trữ mật khẩu ở định dạng văn bản thuần túy.
Luôn luôn băm mật khẩu của bạn.
KHÔNG sử dụng Base64 hoặc mã hóa tương tự để lưu trữ mật khẩu.
KHÔNG sử dụng các thuật toán băm yếu hoặc bị hỏng như MD5 hoặc SHA1. Chỉ sử dụng các thuật toán băm mật khẩu mạnh như BCrypt, được sử dụng trong các chức năng băm mật khẩu của PHP.
KHÔNG bao giờ hiển thị hoặc gửi mật khẩu ở định dạng văn bản thuần túy.
KHÔNG đặt giới hạn không cần thiết đối với mật khẩu của người dùng của bạn.