Tấn công XSS và ngăn chặn với HTML Purifier

trong danh mục PHP, Security

xss-threat3

Cùng với nhu cầu viết các ứng dụng ngày càng mở rộng chức năng cho người dùng, thì các chức năng cho phép thành viên post nội dung là một thao tác tất yếu. Tuy nhiên, cho phép thành viên gởi nội dung sẽ làm phát sinh rất nhiều nguy cơ đe dọa tới sự an toàn của website, trong đó có một mối đe dọa rất phổ biến đó là tấn công Cross-Site Scripting (XSS).

sql_inj_xss

Nói sơ qua về tấn công XSS. XSS hiện tồn tại 2 hình thức là Stored XSS và Reflected XSS. Stored XSS là hình thức tấn công mà ở đó cho phép kẻ tấn công có thể chèn một đoạn script nguy hiểm (thường là Javascript) vào website của chúng ta thông qua một chức năng nào đó (vd: viết lời bình, guestbook, gởi bài..), để từ đó khi các thành viên khác truy cập website sẽ bị dính mã độc từ kẻ tấn công này, các mã độc này thường được lưu lại trong database của website chúng ta nên gọi là Stored. Stored XSS phát sinh do chúng ta không lọc dữ liệu do thành viên gởi lên một cách đúng đắn, khiến cho mã độc được lưu vào Database của website.
stored xss

Hình thức thứ 2 là Reflected XSS. Trong hình thức này, kẻ tấn công thường gắn thêm đoạn mã độc vào URL của website chúng ta và gởi đến nạn nhân, nếu nạn nhân truy cập URL đó thì sẽ bị dính mã độc. Điều này xảy ra do ta không chú ý filter input từ URL của website mình.
xss-attack-reflected

Tấn công XSS là tấn công nguy hiểm, cho phép kẻ tấn công ăn cắp thông tin trên máy nạn nhân thông qua javascript như ăn cắp cookie, chèn mã độc để chiến quyền điều khiển…

—————————————–

Như vậy, để phòng chống tốt nhất XSS là theo nguyên tắc FIEO (Filter Input, Escape Output). Để làm việc này thì hiện tại có khá nhiều bộ lọc để chúng ta lựa chọn. Hôm nay mình giới thiệu tới các bạn một bộ thư viện viết bằng PHP cho phép filter HTML để ngăn chặn kẻ xấu post mã độc XSS thông qua website của bạn, đó là HTML Purifier. Website: http://htmlpurifier.org/

HTMLPurifier

Nói sơ qua về HTML Purifier thì đây là bộ thư viện rất mạnh dùng triển khai trong code của mình để chống XSS. Được xây dựng theo mô hình OOP nên sử dụng rất dễ, sau thao tác include file thư viện, chỉ cần tạo instance của đối tượng HTML Purifier và gọi phương thức purify() là có thể filter được dữ liệu đầu vào.

require_once '/path/to/htmlpurifier/library/HTMLPurifier.auto.php';
$purifier = new HTMLPurifier();
$clean_html = $purifier->purify($dirty_html);

Bảng so sánh giữa các bộ thư viện filter HTML để chống XSS:
compare table

Một số chức năng chính của thư viện HTML Purifier
html-purifier-features-1

html-purifier-features-2

Hy vọng bài viết này cung cấp cho các bạn phần nào về mối đe dọa và phòng tránh XSS trong quá trình triển khai ứng dụng web của bạn.

7 bình luận

  1. […] công XSS và ngăn chặn với HTML Purifier Tấn công XSS và ngăn chặn với HTML Purifier Cùng với nhu cầu viết các ứng dụng ngày càng mở rộng chức năng cho người […]

  2. Trung says:

    Cảm ơn anh, bài viết rất thực tế ! Em đang có ý định tìm hiểu bảo mật web thì google vào ngay blog của anh, mong sao này sẽ có nhiều bài viết hay của anh về lĩnh vực bảo mật.

  3. Cám ơn bài viết của bạn.

  4. FiFi says:

    Chào bạn
    Mình có down thử về dùng, nhưng gặp trở ngại ở chổ là nó tạo cache ra, trên site nó có ghi là

    $config->set(‘Core’, ‘DefinitionCache’, null);

    Để tắt chức năng đó đi, nhưng nó lại ko chỉ đối tượng $config đó từ đâu ra, bạn đã dùng qua rồi chắc biết nó ở đâu nhỉ

  5. John says:

    thường thì ckeditor sẽ có 1 bộ lọc, chỉ cho input html cơ bản và text, không cho phép PHP và javascript thì không có bất kỳ lý do gì để sử dụng purify phải không? Mình nghĩ những website cho nhập php code thì nên dùng.

  6. bài viết hay quá, đúng thứ mình đang cần

  7. Cảm ơn anh, bài viết rất hay ! Em đang có ý định tìm hiểu bảo mật web thì google vào ngay blog của anh.

Gởi bình luận