Lỗi ký tự khi xuất dữ liệu php

thì phải chắc chắn rằng dòng định nghĩa biến ISO trong file ngôn ngữ language\vietnamese.php phải là

3. Do file templates_css.css trong thư mục templates

- Kiểm tra chỗ khai báo font-family xem có phải là các font UNICODE hay không. VD:

Code:

font-family: Arial, Helvetica, sans-serif;
font-family: "Times New Roman", Times, serif;
font-family: "Courier New", Courier, monospace;
font-family: Verdana, Arial, Helvetica, sans-serif;

4. Do các module/component

- Tìm dòng sau trong các file *.php *.xml

Code:

thay bằng:

Code:

5. Do file ngôn ngữ languages\xxxxx.php

- Kiểm tra dòng định nghĩa _ISO

Code:


/** templates/*.php */
DEFINE('_ISO','charset=utf-8'); /* Line 403 trong file english.php */

6. Đối với những máy tính cài hệ điều hành ngôn ngữ bản địa (k0 phải là English - US).

Bạn cần lưu ý sau:

Lỗi ký tự khi xuất dữ liệu php

Tôi đã từng bị với chương trình BKAV cài trên máy có hệ điều hành tiếng Nhật. Nếu k0 làm như trên thì một số ký tự Việt sẽ bị chuyển sang ký tự Nhật. Trông rất khó chịu.

Trong bài Kết nối cơ sở dữ liệu với PHP, chúng ta đã cùng nhau tìm hiểu cách kết nối và truy vấn cơ sở dữ liệu trong PHP. Trong bài này, chúng ta sẽ cùng nhau tìm hiểu về các biện pháp bảo mật trong PHP. Bất kỳ ứng dụng nào cũng đều có thể có những lỗ hổng bảo mật, nếu như các lập trình viên không có các biện pháp tốt để bảo vệ ứng dụng PHP khỏi các lỗi hổng bảo mật sẽ có thể gây ra những hậu quả không thể lường trước được.

1. Lỗ hổng bảo mật trong PHP là gì?

Trong các ngôn ngữ lập trình nói chung, và trong PHP nói riêng việc xuất hiện các lỗ hổng bảo mật đến từ cả lý do khách quan hay chủ quan là điều không thể tránh khỏi. Việc xuất hiện các lỗ hổng bảo mật có thể đến từ rất nhiều nguyên nhân khác nhau và thường thì chúng sẽ phụ thuộc vào các mà ứng dụng được phát triển và triển khai. Sau đây, chúng ta sẽ cùng nhau tìm hiểu một số lỗ hổng bảo mật phổ biến thường xuất hiện trong PHP:

Vấn đề

Mô tả

SQL Injection (SQLi)Đây là lỗi hổng gặp phải khi dữ liệu đầu vào không được kiểm soát một cách chặt chẽ, từ những giá trị đầu vào đó có thể khiến cho việc thực thi mã SQL trở nên không an toàn.Cross-Site Scripting (XSS)XSS cũng là một lỗi xảy ra khi các lập trình viên không kiểm soát tốt dữ liệu đầu vào của người dùng, khi hiển thị những dữ liệu đầu vào mà không kiểm soát kỹ càng người dùng có thể thực thi các mã JavaScript độc hại gây phát sinh lỗi cho hệ thống.Cross-Site Request Forgery (CSRF)Đây là kỹ thuật tấn công khi người dùng không thao tác nhưng kẻ tấn công lại có thể giả mạo các yêu cầu (request) được gửi từ máy của người dùng.File Inclusion VulnerabilitiesViệc sử dụng các hàm như include hoặc require mà dữ liệu đầu vào không có sự kiểm soát nhất định thì cũng có thể gây ra những lỗ hổng cho phép tấn công bằng cách chèn mã độc vào những tập tin này.Insecure Session ManagementPhiên người dùng khi không được quản lý an toàn, người tấn công có thể chiếm đoạt phiên đăng nhập này thông qua đó giả mạo danh tính người dùng.Insecure Direct Object References (IDOR)Cần kiểm tra quyền truy cập của người dùng một cách chính xác, việc này rất quan trọng trong việc kiểm soát các đối tượng người dùng có thể truy cập phù hợp với quyền của mình.Remote Code Execution (RCE)Việc có khả năng thực thi mã từ xa thường xảy ra khi ứng dụng chấp nhận các đầu vào không an toàn và thực thi nó mà không kiểm tra chúng một cách thích hợp.

Phía trên là một số lỗ hổng bảo mật thường gặp, chúng ta sẽ cùng nhau tìm hiểu chi tiết hơn về các lỗ hổng bảo mật trên cũng như cách phòng ngừa chúng sau đây.

\>>> Xem thêm các bài viết trong chuỗi bài về ngôn ngữ lập trình PHP:

  • Bài 1: Tìm hiểu về ngôn ngữ lập trình PHP
  • Bài 2: Hướng dẫn sử dụng XAMPP: Tạo môi trường Lập trình PHP trên máy tính của bạn
  • Bài 3: Tìm hiểu về cú pháp cơ bản trong PHP (Phần 1)
  • Bài 4: Tìm hiểu về cú pháp cơ bản trong PHP (Phần 2)
  • Bài 5: Câu lệnh điều kiện trong PHP

2. SQL Injection (SQLi)

Lỗ hổng này thường xuất phát khi mà ứng dụng PHP không kiểm soát được dữ liệu đầu vào từ phía người dùng. Việc này có thể dẫn đến việc người dùng sử dụng lỗi để triển khai tấn công ứng dụng thông qua việc thực thi trái phép các mã SQL không an toàn trên cơ sở dữ liệu.

Ví dụ: Biến $name trong câu query sau không được kiểm tra cũng như xử lý trước khi đưa vào câu sql.

$sql = "SELECT * FROM posts WHERE name = '" . $name . "'";

Ở đây, chúng ta có rất nhiều cách để có thể xử lý đầu vào trước khi thực thi câu SQL như sử dụng Prepared Statements hoặc Parameterized Queries thay vì chỉ nối chuỗi như trên, hoặc chúng ta cũng có thể sử dụng các hàm như mysqli_real_escape_string() để có thể kiểm soát được dữ liệu từ người dùng nhập vào.

// Sử dụng Prepared Statements
$stmt = $conn->prepare("SELECT * FROM posts WHERE name = ?");
$stmt->bind_param("s", $name);
$stmt->execute();

\>>> Xem thêm bài viết tương tự tại đây:

  • Câu lệnh điều kiện và vòng lặp trong PHP
  • Xử lý biểu mẫu trong PHP

3. Cross-Site Scripting (XSS)

Lỗ hổng XSS cũng là một lỗ hổng xảy ra khi mà dữ liệu đầu vào của người dùng không được kiểm soát đúng cách. Gây nên nguy cơ khi mà người dùng hoàn toàn có thể chèn các mã JavaScript độc hại và thực thi nó trên ứng dụng web trên trình duyệt của người sử dụng.

Ví dụ: Dữ liệu được hiển thị lên trang web mà không được xử lý trước

echo "Welcome, " . $user_input;

Ở đây các thông dụng nhất là sử dụng hàm

// Sử dụng Prepared Statements
$stmt = $conn->prepare("SELECT * FROM posts WHERE name = ?");
$stmt->bind_param("s", $name);
$stmt->execute();

0 để có thể xử lý các ký tự đặc biệt thành các HTML entities trước khi hiển thị dữ liệu nhập từ người dùng.

echo "Welcome, " . htmlspecialchars($user_input);

4. Cross-Site Request Forgery (CSRF)

Đây là lỗ hổng mà những hacker có thể lợi dụng để tạo ra những request giả mạo trên máy khách của người dùng mà không cần sự tương tác của họ.

Ví dụ: Dưới đây là một biểu mẫu có thể bị tận dụng bới lỗi CSRF

Trong trường hợp này, chúng ta có thể ngăn chặn phương pháp tấn công này bằng cách tạo ra một chuỗi token CSRF để xác thực yêu cầu mỗi khi người dùng gửi request lên server để đảm bảo những thao tác đó là do chính người dùng thao tác, chứ không phải là một cuộc tấn công lợi dụng lỗ hổng CSRF.

// Tạo ra token CSRF
$token = bin2hex(random_bytes(32));
// Lưu trữ lại token được tạo ra, ở đây chúng ta sẽ lưu vào $SESSION
$_SESSION['csrf_token'] = $token;
// Kiểm tra token CSRF trước khi xử lý yêu cầu
if ($_POST['csrf_token'] === $_SESSION['csrf_token']) {
    // Xử lý yêu cầu
}

5. Một số lỗi thường gặp khác

  • Sử dụng các phiên bản quá cũ: Với sự phát triển của nhiều cách tấn công phức tạp hiện nay, việc liên tục cập nhật phần mềm cũng có tác dụng không hề nhỏ trong việc cập nhật các phiên bản vá lỗi, việc này sẽ giúp cho các lỗi từ thư viện sẽ được khắc phục từ đó giúp hệ thống hoạt động tốt và ổn định hơn.
  • Giới hạn quyền truy cập một số tệp tin quan trọng: Trong từng ứng dụng sẽ có những tệp tin không được phép truy cập từ những người dùng thông thường, chúng ta cần tìm hiểu xem hệ thống đang sử dụng có phương pháp nào để giữ an toàn cho những tệp tin này.

Tổng kết

Chúng ta đã cùng nhau tìm hiểu về các lỗ hổng bảo mật có thể gặp phải khi làm việc với các ứng dụng web, cụ thể ở đây là ngôn ngữ lập trình PHP. Những lỗ hổng này hoàn toàn có thể xảy ra ở bất kỳ ứng dụng nào nếu như lập trình viên không có kiến thức hoặc không chủ động phòng ngừa chúng. Công việc ngăn chặn cũng như nâng cao bảo mật này đòi hỏi sự chú ý đặc biệt từ các lập trình viên.


Stringee Communication APIs là giải pháp cung cấp các tính năng giao tiếp như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài CSKH cho phép tích hợp trực tiếp vào ứng dụng/website của doanh nghiệp nhanh chóng. Nhờ đó giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.

Bộ API giao tiếp của Stringee hiện đang được tin dùng bởi các doanh nghiệp ở mọi quy mô, lĩnh vực ngành nghề như TPBank, VOVBacsi24, VNDirect, Shinhan Finance, Ahamove, Logivan, Homedy, Adavigo, bTaskee…