Lọc HTML an toàn API
Loại bỏ script, iframe, form, event handler, style inline và link javascript: khỏi HTML không tin cậy trước khi hiển thị.
Gửi HTML không tin cậy qua trường html (JSON hoặc form) hoặc dưới dạng body thô text/html, API trả về bản đã làm sạch trong trường html. Bộ lọc phân tích cú pháp HTML và xoá hẳn các thẻ nguy hiểm: script, style, iframe, object, embed, form, input, button, link, meta, base, frame và frameset.
Với các thẻ còn lại, API xoá mọi thuộc tính on* (onclick, onerror...), mọi thuộc tính style, và các giá trị href, src, xlink:href, action bắt đầu bằng javascript:, vbscript: hoặc data:text. Định dạng thông thường, link, ảnh và bảng được giữ nguyên. Đây cũng là bộ lọc mà API Markdown sang HTML sử dụng.
Body request tối đa 1 MB, trường html tối đa 2.000.000 ký tự. Bộ lọc hoạt động theo danh sách chặn, nên với nội dung đặc biệt nhạy cảm hãy kết hợp thêm Content Security Policy.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
html | body | string | có | HTML cần làm sạch (tối đa 2.000.000 ký tự). Có thể gửi dưới dạng body thô text/html. |
Ví dụ
curl -X POST "https://apibox.io.vn/v1/html-sanitize" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"html":"<p onclick=\"alert(1)\" style=\"color:red\">Hi <a href=\"javascript:alert(1)\">click</a></p><script>alert(2)</script><img src=\"x\" onerror=\"alert(3)\">"}'const res = await fetch('https://apibox.io.vn/v1/html-sanitize', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"html": "<p onclick=\"alert(1)\" style=\"color:red\">Hi <a href=\"javascript:alert(1)\">click</a></p><script>alert(2)</script><img src=\"x\" onerror=\"alert(3)\">"
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/html-sanitize",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"html": "<p onclick=\"alert(1)\" style=\"color:red\">Hi <a href=\"javascript:alert(1)\">click</a></p><script>alert(2)</script><img src=\"x\" onerror=\"alert(3)\">"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/html-sanitize');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"html":"<p onclick=\\"alert(1)\\" style=\\"color:red\\">Hi <a href=\\"javascript:alert(1)\\">click</a></p><script>alert(2)</script><img src=\\"x\\" onerror=\\"alert(3)\\">"}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"html": "<p>Hi <a>click</a></p><img src=\"x\">"
}
Ứng dụng
- Làm sạch HTML do người dùng nhập từ bình luận, diễn đàn, trình soạn thảo
- Gỡ script theo dõi và style inline khỏi nội dung nhập từ nguồn khác
- Lọc email HTML trước khi hiển thị trong ứng dụng web
- Chuẩn bị HTML thu thập từ web để lưu trữ và hiển thị an toàn
Hỏi đáp
Những thẻ và thuộc tính nào bị loại bỏ?
Các thẻ script, style, iframe, object, embed, form, input, button, link, meta, base, frame, frameset; mọi event handler on*; mọi thuộc tính style; và URL javascript:, vbscript:, data:text trong href, src, xlink:href, action.
Link và ảnh có được giữ lại không?
Có. Thẻ <a href> và <img src> bình thường được giữ nguyên; chỉ các URL nguy hiểm và event handler như onerror bị xoá.
Có gửi HTML thô mà không cần JSON được không?
Được. Gửi HTML làm body của request POST với Content-Type: text/html.
API liên quan
HTML sang Markdown
Chuyển HTML hoặc URL trang web bất kỳ thành Markdown gọn gàng chuẩn GitHub, hỗ trợ bảng, trích xuất bài viết chính và link tuyệt đối.
</>Markdown sang HTML
Chuyển Markdown chuẩn GitHub sang HTML, hỗ trợ bảng và gạch ngang. Kết quả được lọc sẵn script và event handler để chống XSS.
TtHTML sang văn bản
Bỏ thẻ HTML hoặc lấy nội dung từ URL trang web thành văn bản thuần dễ đọc, giữ xuống dòng, kèm số từ và số ký tự.