tan cong website (2)

Các Kiểu Tấn Công Website Phổ Biến Nhất và Cách Phòng Chống (2026)

Tổng hợp các kiểu tấn công website nguy hiểm nhất: SQL Injection, XSS, CSRF, Broken Access Control, Clickjacking, SSRF… và cách phòng chống cụ thể có code mẫu cho web developer, dựa trên giáo trình chuẩn OWASP/Tricorder.

Bạn đang build website mới, review pull request của teammate, hoặc nhận dự án outsource từ client Nhật. Câu hỏi luôn thường trực là: “Hacker có thể tấn công vào những phần nào của hệ thống?”

Bài viết này mang đến cho bạn câu trả lời một cách có hệ thống. Trong đó, chuyên gia của CO-WELL phân tích từng kiểu tấn công cụ thể, cơ chế hoạt động và đối sách phòng chống kèm code mẫu dựa trực tiếp trên giáo trình “Thiết kế ứng dụng Web an toàn” – giáo trình được sử dụng trong khóa học Thiết kế website an toàn của CO-WELL Tech Academy.

Tại sao tấn công website vẫn xảy ra dù đã dùng HTTPS?

Đây là quan niệm sai phổ biến nhất trong giới developer: “Mình đã có HTTPS rồi, vậy là an toàn.”

HTTPS bảo vệ đường truyền giữa trình duyệt và server, ngăn nghe lén, giả mạo nội dung và mạo danh server. Nhưng HTTPS hoàn toàn không bảo vệ logic bên trong ứng dụng. Khi dữ liệu đã đến server, HTTPS không còn vai trò gì nữa.

Phần lớn các cuộc tấn công website xảy ra ở application layer – lớp ứng dụng – nơi HTTPS không có mặt:

  • Ứng dụng không kiểm tra input từ người dùng → SQL Injection
  • Ứng dụng không escape output trước khi render → XSS
  • Ứng dụng không xác minh nguồn gốc request → CSRF
  • Ứng dụng không kiểm soát quyền truy cập đúng cách → Broken Access Control

Năm 2014, một vụ kiện tại Nhật Bản ghi nhận 7.316 thông tin thẻ tín dụng bị rò rỉ do SQL Injection – dù website hoạt động bình thường và có HTTPS. Công ty phát triển bị buộc bồi thường ~22,62 triệu yên. Tòa phán quyết: dù hợp đồng không yêu cầu bảo mật, developer vẫn có nghĩa vụ áp dụng các đối sách đã được công khai hướng dẫn.

Vậy có những phương thức tấn công phổ biến nào mà hacker đang sử dụng. Hãy cùng CO-WELL Tech Academy tìm hiểu và phân tích nhé. 

1. SQL Injection - Khi Hacker Nói Chuyện Thẳng Với Database

SQL Injection là gì?

SQL Injection xảy ra khi ứng dụng web nhúng trực tiếp input từ người dùng vào câu lệnh SQL mà không xử lý đúng cách. Kẻ tấn công chèn các ký tự đặc biệt và câu lệnh SQL độc hại vào input, khiến database thực thi lệnh ngoài ý muốn: đọc toàn bộ dữ liệu, xóa bảng, hoặc bypass xác thực.

Ví dụ đơn giản nhất:

sql
-- Code không an toàn: nối chuỗi trực tiếp

SELECT * FROM users WHERE username = '[INPUT]' AND password = '[INPUT]'

-- Kẻ tấn công nhập: ' OR '1'='1
-- Câu lệnh thực thi: SELECT * FROM users WHERE username = '' OR '1'='1'
-- Kết quả: bypass xác thực, lấy toàn bộ dữ liệu

Các ký tự đặc biệt trong SQL cần lưu ý

Các metacharacter của SQL mà developer cần nhận biết:

” ‘ – phân tách chuỗi | % – biểu thức chính quy | ( ) – phân tách chuỗi/câu lệnh | * – biểu thức chính quy | ; – phân tách lệnh | < = > – toán tử | ? – biểu thức chính quy | , – phân tách | – – số âm | | – toán tử | . – chỉ định field | / – toán tử | : – đặt giá trị biến

Ngoài các ký tự tiêu chuẩn, mỗi hệ DBMS còn có ký tự đặc biệt riêng.

Đối sách chuẩn: Prepared Statement (Placeholder tĩnh)

Phương pháp được khuyến nghị là Prepared Statement – tách hoàn toàn cấu trúc câu lệnh SQL khỏi dữ liệu đầu vào. Database phân tích cú pháp câu lệnh trước, sau đó bind giá trị vào – kẻ tấn công không thể thay đổi cấu trúc câu lệnh dù nhập bất cứ thứ gì.

php
// ✅ ĐÚNG - Prepared Statement
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
$stmt->execute([$_GET['name']]);

foreach ($stmt as $row) {
  print_r($row);
}

// ❌ SAI - Nối chuỗi trực tiếp
$sql = "SELECT * FROM REGISTRY where name = " . $_GET['name'];
java
// ✅ ĐÚNG - PreparedStatement

String sql = "INSERT INTO users VALUES(?,?,?)";

PreparedStatement pstmt =
    con.prepareStatement(sql);

pstmt.setString(1, userid);
pstmt.setString(2, pwhash);
pstmt.setString(3, usersalt);

int res =
    pstmt.executeUpdate();

Khi không thể dùng placeholder tĩnh (trường hợp đặc biệt như ORDER BY dynamic):

  • Dùng placeholder động (nếu framework hỗ trợ)
  • Nếu bắt buộc nối chuỗi: escape tất cả ký tự đặc biệt SQL theo DBMS đang dùng
  • Tham khảo: “Cách truy xuất SQL an toàn” của IPA

2. XSS (Cross-Site Scripting) – Hacker Cài Code Vào Trang Của Bạn

XSS là gì?

XSS xảy ra khi ứng dụng web hiển thị dữ liệu từ người dùng lên trang mà không escape khiến trình duyệt của nạn nhân thực thi script độc hại. Hậu quả: đánh cắp cookie/session, chiếm tài khoản, redirect sang trang giả mạo, hoặc thực hiện hành động thay mặt nạn nhân.

Có hai loại chính:

  • Reflected XSS: Script được chèn trong URL/request, server trả về ngay trong response. Thường dùng để tấn công có mục tiêu qua link độc hại.
  • Stored XSS: Script được lưu vào database (comment, profile, tin nhắn) và hiển thị cho tất cả người xem trang.
  • DOM-based XSS: Script được xử lý hoàn toàn phía client thông qua JavaScript – server không liên quan. Đây là dạng khó phát hiện nhất.

Các điểm nguy hiểm trong DOM-based XSS

Các chuyên gia chỉ rõ các cặp Source → Sink điển hình cần kiểm tra:

Source (nơi script được nhập) Sink (nơi xảy ra XSS)
location.href document.write
location.search location.href
location.hash element.innerHTML
document.cookie eval
document.referrer setTimeout / setInterval
window.name Function()
XMLHttpRequest.responseText jQuery(), $(), $.html()

Nguyên tắc: Không bao giờ đưa dữ liệu từ Source vào Sink mà không xử lý kỹ.

Đối sách: HTML Escape và CSP

Escape HTML output – chuyển ký tự đặc biệt thành HTML entity ngay trước khi render:

Ký tự gốc Sau khi escape
< &lt;
> &gt;
" &quot;
& &amp;
' &#39;

Quy tắc thực thi từ giáo trình:

  • Luôn đặt giá trị thuộc tính HTML trong dấu ngoặc kép: <input value=”…”>
  • Không tạo JavaScript động từ input bên ngoài
  • Đối với DOM-based XSS: dùng textContent hoặc document.createTextNode() thay vì innerHTML
  • Khi tạo URL từ input: chỉ chấp nhận http/https → kiểm tra bằng url.match(/^https?:\/\//)
  • Khi dùng framework có template engine: thường đã auto-escape – nhưng vẫn phải kiểm tra kỹ các vị trí tắt auto-escape

PHP – dùng hàm có sẵn:

php
// ✅ ĐÚNG - htmlspecialchars tự động escape

echo htmlspecialchars($value, ENT_QUOTES, 'UTF-8');

// ❌ SAI - output trực tiếp không escape

echo $value;

Content-Security-Policy (CSP) header – ngăn trình duyệt load script từ nguồn không tin cậy:

Content-Security-Policy: default-src 'self'; script-src 'self'

3. CSRF – Khi Hacker Lợi Dụng Danh Tính Của Chính Bạn

CSRF là gì?

CSRF (Cross-Site Request Forgery – Tấn công giả mạo chính chủ thể) lừa người dùng đang đăng nhập thực hiện hành động ngoài ý muốn trên ứng dụng mà họ đang có phiên hợp lệ.

Cơ chế: Kẻ tấn công tạo trang web hoặc email chứa request ẩn đến ứng dụng mục tiêu. Khi nạn nhân (đang đăng nhập) truy cập trang đó, trình duyệt tự động gửi request kèm cookie hợp lệ – server tin đây là yêu cầu hợp lệ của người dùng.

Hậu quả thực tế: đổi mật khẩu nạn nhân, chuyển tiền, đăng bài dưới danh nghĩa nạn nhân, xóa dữ liệu.

CSRF cần được triển khai tại: các điểm quyết định ghi/thay đổi database, thay đổi mật khẩu, xác nhận thanh toán, gửi bài, cập nhật thông tin cá nhân. Không cần triển khai tại các endpoint tiếp nhận yêu cầu không xác định từ bên ngoài (như API public).

Đối sách: Phương thức Token (khuyến nghị)

Các chuyên gia khuyến nghị phương thức Token là đối sách chính:

  1. Server tạo token ngẫu nhiên duy nhất cho mỗi user (openssl_random_pseudo_bytes(32))
  2. Lưu token trên server và nhúng vào hidden field của form
  3. Khi form được submit, token được gửi kèm qua POST
  4. Server đối chiếu token gửi lên với token đã lưu, không khớp → từ chối xử lý

 

php
<?php

// Tạo token bằng trình tạo số giả ngẫu nhiên mạnh về mặt mã
$token = openssl_random_pseudo_bytes(32);

// Lưu token vào DB theo từng user

?>

<form action="/process.php" method="POST">

    <input type="text" name="data" value="">

    <input type="hidden"
           name="authenticity_token"
           value="<?= bin2hex($token) ?>">

    <input type="submit"
           value="Xác nhận">

</form>
php
<?php

// Token gửi lên phải khớp với token đã lưu trong DB

if ($_POST["authenticity_token"] === $token) {

    // Token hợp lệ - xử lý tiếp
    echo "Yêu cầu hợp lệ";

} else {

    // Token không khớp - từ chối
    echo "Yêu cầu không hợp lệ";

}

?>

Lưu ý: Nhiều framework hiện đại (Laravel, Spring, Django…) đã tích hợp sẵn CSRF protection – ưu tiên dùng cơ chế của framework thay vì tự implement.

Đối sách bổ sung: SameSite Cookie

Thiết lập thuộc tính SameSite cho cookie ngăn trình duyệt gửi cookie sang request từ domain khác:

  • SameSite=Strict: không gửi cookie cho bất kỳ request cross-site nào
  • SameSite=Lax: không gửi cookie ngoại trừ top-level navigation (click link trực tiếp)
  • SameSite=None: giữ hành vi cũ (không bảo vệ)

Tuy nhiên, SameSite không đủ một mình – giáo trình GSX khuyến nghị dùng kết hợp Token + SameSite vì SameSite không hiệu quả trong các trường hợp: trình duyệt không hỗ trợ (IE11), tấn công trong cùng domain, và tấn công sử dụng XSS.

3. Broken Access Control – Lỗ Hổng Nguy Hiểm Nhất Theo OWASP 2025

Broken Access Control là gì?

Broken Access Control (A01 trong OWASP Top 10 2025) – đứng đầu danh sách – xảy ra khi ứng dụng không kiểm tra đúng đắn xem người dùng có quyền thực hiện hành động hoặc xem dữ liệu mà họ đang yêu cầu hay không.

Theo giáo trình Tricorder, các dạng tấn công phổ biến:

  • Ghi đè URL/parameter: Thay đổi ?id=1701 thành ?id=1702 để xem thông tin của người dùng khác
  • Ghi đè sessionID: Thay sessionID sang ID của người dùng có quyền cao hơn
  • Ghi đè thông tin quyền hạn: Thay đổi giá trị parameter lưu quyền (?role=user thành ?role=admin)
  • Truy cập trực tiếp URL: Bỏ qua xác thực bằng cách truy cập URL trực tiếp mà không qua luồng đăng nhập
  • Truy cập file trong thư mục public: Các file cấu hình, dữ liệu nhạy cảm đặt sai vị trí có thể truy cập công khai

Dạng tấn công IDOR (Insecure Direct Object Reference) – truy cập trực tiếp đối tượng qua ID có thể đoán/thay đổi được – là biểu hiện điển hình nhất của Broken Access Control.

Đối sách thiết kế Authorization đúng chuẩn

5 nguyên tắc thiết kế phân quyền:

1. Quyền tối thiểu (Least Privilege) Chỉ cấp đúng quyền tối thiểu cần thiết để thực hiện chức năng. Không cấp dư quyền “cho chắc”.

2. Mặc định từ chối (Default Deny) Truy cập bị từ chối nếu không được quy định rõ trong chính sách kiểm soát truy cập. Không phải “cho phép tất cả, chặn ngoại lệ”.

3. Xác thực quyền cho tất cả request Kể cả tài nguyên tĩnh như ảnh, PDF, file download – đều phải qua kiểm tra quyền trước khi trả về.

4. Không thiết kế chỉ định ID trực tiếp Thay ?id=1701 bằng indirect reference (token, hash, mapping table nội bộ) để kẻ tấn công không thể đoán ID của người khác.

5. Ghi log thích hợp Log đầy đủ các hành vi truy cập – đặc biệt là các lần truy cập thất bại – để phát hiện hành vi ác ý và phục vụ điều tra sau sự cố.

Công cụ thực tế: Tạo danh sách kiểm soát truy cập (Access Control List) liệt kê rõ từng URL/chức năng và nhóm quyền tương ứng:

URL / Chức năng Guest Member Admin Ghi chú
/ (trang chủ) Public
/products Public
/mypage × (chỉ của mình) Cần xác thực
/admin × × Chỉ Admin
/api/users/{id} × (chỉ ID của mình) Kiểm tra owner
v

4. Clickjacking và Open Redirect – Các Kỹ Thuật Lừa Đảo Giao Diện

Clickjacking

Kẻ tấn công nhúng trang mục tiêu vào trong một iframe trong suốt, đặt chồng lên giao diện lừa đảo của mình. Người dùng tưởng đang click vào nút vô hại – thực ra đang click vào nút của ứng dụng mục tiêu (xác nhận thanh toán, bật quyền camera, like bài viết…).

Đối sách – Content Security Policy header:

Content-Security-Policy: frame-ancestors 'none';

Hoặc chỉ cho phép trang chính nhúng:

Content-Security-Policy: frame-ancestors 'self';

Header cũ (vẫn hỗ trợ cho trình duyệt cũ):

X-Frame-Options: DENY
X-Frame-Options: SAMEORIGIN

Open Redirect

Ứng dụng redirect người dùng đến URL được lấy từ parameter input – ví dụ: /login?next=https://evil.com. Kẻ tấn công dùng domain hợp lệ của ứng dụng làm bàn đạp để redirect sang trang phishing, tăng độ tin cậy của cuộc tấn công.

Theo lời khuyên của chuyên gia CO-WELL Tech Academy:

  • Cách tốt nhất: Chỉ redirect đến các URL đã xác định trước (hardcode danh sách)
  • Nếu cần redirect động: dùng whitelist – chỉ chấp nhận các domain/path được phép
  • Kiểm tra URL đầu vào trên cả application layer và network layer

Các Kiểu Injection Khác Cần Biết

SQL Injection và XSS là phổ biến nhất nhưng không phải duy nhất. Các chuyên gia của CO-WELL đã liệt kê đầy đủ các dạng Injection mà developer cần nhận biết:

Kiểu tấn công Mục tiêu Đối sách chung
Command Injection Thực thi lệnh OS tùy ý Dùng API, không dùng shell; nếu bắt buộc: escape lệnh
CRLF Injection Chèn HTTP header giả Không cho phép ký tự CR (\r) và LF (\n) trong output HTTP header
XXE (XML External Entity) Đọc file hệ thống, SSRF qua XML Vô hiệu hóa DTD; PHP 8.0+ mặc định đã vô hiệu
SSRF (Server-Side Request Forgery) Buộc server gửi request đến mạng nội bộ Whitelist điểm đích; kiểm soát ở cả application và network layer
SSTi (Server-Side Template Injection) Thực thi code qua template engine Không đưa input vào template string; dùng template có sandbox
LDAP Injection Thao túng LDAP query Escape ký tự đặc biệt LDAP
NoSQL Injection Thao túng MongoDB/Cassandra query Dùng parameterized query của driver
ORM Injection Bypass ORM sang raw SQL Không dùng raw query trong ORM

Nguyên tắc chung cho mọi Injection: Khi có hàm/chức năng tự động ngăn chặn phá hủy cú pháp hoặc xử lý escape – hãy dùng. Khi không có – thực hiện escape ký tự đặc biệt tại đầu ra trước khi truyền sang hệ thống nhận.

Xử Lý Input và Output Đúng Cách – Nền Tảng Của Mọi Đối Sách

Tất cả các kiểu tấn công trên đều có một điểm chung: dữ liệu từ người dùng không được kiểm soát đúng cách. Vì thế, chúng ta cần cần cân nhắc tới các phương thức phòng chống tấn công như: 

Input Validation – Kiểm tra đầu vào

Mọi giá trị nhận từ bên ngoài đều phải được coi là không tin cậy cho đến khi được kiểm tra:

  • Tất cả nguồn đầu vào: query string, form data, cookie, HTTP header, file upload, URL
  • Kiểm tra loại ký tự và mã hóa: thống nhất UTF-8 cho toàn bộ – HTML, source-code, database. Sai encoding là nguồn gốc của nhiều lỗ hổng bypass
  • Kiểm tra độ dài: đặt giới hạn max rõ ràng cho mọi field. Không có field nào “không giới hạn”
  • Client-side validation không thay thế server-side: JavaScript trên trình duyệt có thể bị vô hiệu hóa hoặc giả mạo hoàn toàn. Mọi kiểm tra bảo mật phải thực hiện phía server

Output Encoding – Xử lý đầu ra

  • Escape ngay trước khi output – không phải khi nhận input. Lý do: cùng một dữ liệu có thể được output ở nhiều ngữ cảnh khác nhau (HTML, SQL, JavaScript, URL), mỗi ngữ cảnh cần escape khác nhau
  • Dùng POST cho dữ liệu nhạy cảm – GET request để lại dấu vết trong access log, referrer header, browser history
  • Không lưu thông tin nhạy cảm trong URL – sessionID, token, thông tin cá nhân không được xuất hiện trong URL

Xử lý file upload – Ngữ cảnh đặc biệt

File được người dùng upload cũng là một dạng input và cần xử lý nghiêm ngặt:

  • Kiểm tra MIME type phía server (không chỉ tin vào Content-Type của request)
  • Giới hạn kích thước và định dạng cho phép
  • Lưu file ngoài thư mục public (không thể truy cập trực tiếp qua URL)
  • Cân nhắc các tấn công: XSS qua SVG/HTML upload, LFI (Local File Inclusion), XXE qua XML upload, DoS qua file quá lớn

Điểm chung của tất cả: không tin tưởng bất kỳ input nào từ bên ngoàiescape đúng ngữ cảnh trước khi output. Hai nguyên tắc này, nếu áp dụng nhất quán, loại trừ được phần lớn các lỗ hổng trong danh sách trên.

Developer cần Thực Hành Viết Code Bảo Mật Có Hướng Dẫn

Hiểu lý thuyết là bước một. Bước quan trọng hơn là thực hành viết code an toàn theo đúng chuẩn, có feedback từ người có chuyên môn.

Khóa học GSX – Thiết Kế Ứng Dụng Web An Toàn tại CO-WELL Tech Academy cung cấp:

  • Toàn bộ nội dung bài này và các chủ đề bảo mật liên quan theo hệ thống
  • Bài tập thực hành với sample code PHP và Java từ Tricorder Co., Ltd.
  • Giáo trình chuẩn được xây dựng bởi ông Ueno Sen – Đại diện OWASP Japan, Tổng biên tập – Tạp chí chuyên ngành an ninh thông tin ScanNetSecurity
  • Chứng chỉ được cấp bởi bởi Global Security Expert (GSX)

[Đăng ký khóa học GSX – Thiết Kế Ứng Dụng Web An Toàn tại CO-WELL Tech Academy]

Bạn đang có băn khoăn nào cần được giải đáp?

SQL Injection là kỹ thuật tấn công chèn câu lệnh SQL độc hại vào input của ứng dụng, buộc database thực thi lệnh ngoài ý muốn. Kẻ tấn công có thể đọc toàn bộ dữ liệu, xóa database, hoặc bypass xác thực – đây là nguyên nhân của hàng nghìn vụ rò rỉ dữ liệu mỗi năm.

Dùng Prepared Statement (Placeholder tĩnh) – tách hoàn toàn cấu trúc câu lệnh SQL khỏi dữ liệu đầu vào. PHP dùng $dbh->prepare(), Java dùng PreparedStatement. Tuyệt đối không nối chuỗi SQL trực tiếp từ input người dùng.

SQL Injection tấn công database phía server; XSS tấn công trình duyệt của người dùng phía client. SQL Injection đọc/sửa/xóa dữ liệu; XSS đánh cắp cookie, chiếm session, hoặc chạy mã độc trên máy nạn nhân. Hai kiểu tấn công này thường được dùng kết hợp trong một cuộc tấn công phức tạp.

Server tạo token ngẫu nhiên duy nhất, nhúng vào hidden field của form và lưu trên server. Khi form được submit, token được gửi kèm; server so sánh token gửi lên với token đã lưu. Trang web giả mạo (tấn công CSRF) không thể biết token này nên request sẽ bị server từ chối.

Broken Access Control xảy ra khi ứng dụng không kiểm tra đúng đắn quyền của người dùng trước khi cho phép truy cập dữ liệu hoặc thực hiện hành động. Ví dụ điển hình: thay đổi ?id=123 thành ?id=124 trong URL để xem dữ liệu của người khác – đây là dạng IDOR (Insecure Direct Object Reference), đứng đầu OWASP Top 10 năm 2025.

Theo phán quyết tòa án Nhật Bản năm 2014, developer có trách nhiệm pháp lý với bảo mật ngay cả khi hợp đồng không đề cập. Hơn nữa, phần lớn lỗ hổng bảo mật được sinh ra trong quá trình viết code – không phải sau khi deploy. Developer là tuyến phòng thủ đầu tiên và hiệu quả nhất.

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Các tin tức khác