2011-09-01 36 views
7

Tôi đang viết một chức năng phân tích nhận xét trong PHP.Tại sao tôi nên sử dụng BBCode nhưng không sử dụng HTML ở dạng bình luận?

Vì BBCode không phải là ngôn ngữ đánh dấu thực, tôi chưa bao giờ thích phong cách viết.
Vì vậy, tôi cung cấp cho khách truy cập khả năng sử dụng mã HTML cơ bản trong các biểu mẫu nhận xét.
Và khi đăng, PHP sẽ kiểm tra các thẻ/thuộc tính không được phép và không hợp lệ và thay thế hoặc xóa chúng.

Tôi tin rằng nó thực hiện công việc và đầu ra giống hệt như với BBCode.

Nếu điều này đúng, tại sao có BBCode? BBcode có bất kỳ lợi thế nào so với HTML không?

cập nhật

như đơn sắc trả lời

Nếu bạn tự tin rằng bộ lọc HTML của bạn là đủ an toàn, bạn nên sử dụng tốt mặc dù

tốt, tôi không phải là văn bản tự tin bản thân bộ lọc, nhưng có một số bộ lọc được đánh giá hàng đầu như PHP PHP Parser HTML đơn giản, Trình lọc HTML, htmLawed ...

BBCode được phát triển bởi UBB và vẫn đang được sử dụng rộng rãi, chẳng hạn như phpBB.

Các nhà phát triển từ UBB/phpBB có tự tin về kỹ năng của họ để viết một bộ lọc HTML hoàn hảo không? (Tôi đoán là không)

Ngoài ra, giống như Markdown mà StackOverflow đang sử dụng ... nếu HTML + Parser thực hiện công việc, tại sao lại tạo ra một "ngôn ngữ" khác? (ngoại trừ việc tiết kiệm một vài bit ...)

+2

Đánh dấu là đánh dấu mới. – BoltClock

+1

Tôi nghĩ rằng đánh dấu HTML khá dễ khai thác và kiểm tra của bạn là giải pháp thay thế. Tin tặc có thể khá khéo léo khi tìm kiếm lỗ hổng bảo mật;) – knittl

+0

@knittl Vì vậy, đây là về tôi/tin tặc PHP vs. tốt, có lẽ tôi không nên thêm "NẾU ... hệ thống phân tích cú pháp của tôi là WELL/STRICTLY được viết." Tôi thực sự muốn nhìn thấy một ví dụ hacking chống lại một html-cho phép-bình luận-hình thức. – Jon

Trả lời

2

BBCode loại bỏ sự cố bộ lọc HTML của bạn có thể có lỗi để người nhận xét có thể nhận xét mã mà anh ấy không phải nhận xét. Nếu bạn tự tin rằng bộ lọc HTML của mình đủ an toàn, bạn nên ổn.

Một vấn đề khác là nhận xét HTML có thể làm hỏng bố cục của bạn, ví dụ: khi người nhận xét đặt trong một đóng đơn </div> hoặc một cái gì đó tương tự.

+4

Không, không. Bộ phân tích cú pháp BBCode có thể có các lỗi cho phép XSS. – Quentin

4

Đó là lợi thế chính là ngăn chặn việc tiêm mã không mong muốn. Đó là lý do tại sao tôi sẽ sử dụng một cái gì đó như BBCode hoặc Markdown.

Ít nhất bạn nên làm việc với Danh sách trắng các thẻ HTML được phép và không có danh sách đen.

+0

+1 cho nhận xét về danh sách trắng. –

+3

* Mỗi thẻ đơn (body) * có thể có tập lệnh được đính kèm với các thuộc tính của nó, ví dụ: Phong cách. Bạn cũng sẽ cần một danh sách trắng của tên attr. – Cheekysoft

1

BBCode trở nên phổ biến vì cho phép người dùng truy cập giới hạn vào html trong khi cố gắng ngăn chặn XSS. BBCode trở nên phổ biến trước đó, nơi các giải pháp như HTML Purifier. Trong tất cả thực tế, BBCode và Html Purifier đều có vấn đề về bảo mật riêng. Nó chỉ là BBCode là một giải pháp đơn giản hơn cho vấn đề này.

0

Sử dụng BBcode + chuyển đổi tất cả thẻ bên trái thành htmlspecialchar có vẻ hoàn toàn XSS miễn phí đối với tôi. (trừ khi trình phân tích cú pháp BBcode thực sự được thiết kế siêu tồi)

Cuối cùng, cả hai đều đạt được mục tiêu tương tự. Hiện tại tôi chọn BBcode vì thẻ tự động thay thế HTMLpurifier thay vì thẻ bên trái thay thế bằng html specialChar. Ít nhất trong bản demo tôi không thấy chức năng giữ thẻ bên trái.

Vì vậy, có một số vấn đề khi chúng tôi muốn người dùng viết & lt; thay vì tự động chuyển đổi nó thành <. Và một số vấn đề khác của sự lười biếng để xác nhận tất cả dữ liệu.

Các vấn đề liên quan