2012-03-15 27 views
9

Các trang web StackExchange sử dụng cú pháp MarkDown để viết câu hỏi và câu trả lời. Điều này được tạo bằng cách sử dụng PageDown ở phía máy khách và MarkDownSharpJeff's HTML sanitizer ở phía máy chủ. Tôi đang nghĩ đến việc xây dựng một cái gì đó rất giống bản thân mình.Mục đích của MarkDownSharp khi được sử dụng với PageDown là gì?

Tôi hiểu tại sao tôi cần phải khử trùng HTML ở phía máy chủ. Nhưng mục đích của MarkDownSharp là gì? Tại sao tôi không chỉ dịch từ MarkDown sang HTML với PageDown ở phía máy khách và gửi nó tới máy chủ?

Trả lời

16

Những lý do quan trọng nhất:

  1. Chúng tôi muốn cơ bản nhất (theo nghĩa của "cơ bản") chức năng của các trang web stack Trao đổi, hỏi và trả lời, để làm việc mà không Javascript. Hầu hết các nội dung nâng cao như bỏ phiếu, gắn cờ, giao diện người dùng, văn bản trợ giúp, yêu thích, hộp thư đến toàn cầu và không yêu cầu JavaScript, điều đó không sao. Nhưng một điều mà các trang web không thể sống mà không có – Q & A – không nên có yêu cầu đó, để giữ ma sát càng thấp càng tốt.

    Tất nhiên, khi bạn không có JavaScript làm yêu cầu, bạn không thể yêu cầu khách hàng hiển thị Đánh dấu.

  2. Chúng tôi chỉ lưu trữ phiên bản HTML được hiển thị của phiên bản mới nhất của bài đăng. Đối với các bản chỉnh sửa trước đây, chúng tôi chỉ lưu trữ nguồn Markdown. Lưu trữ cả hai phiên bản cho mọi chỉnh sửa được thực hiện sẽ là một sự lãng phí rất lớn về không gian, vì các phiên bản cũ hầu như không cần thiết. Nhưng đôi khi cần, ví dụ: trong lịch sử sửa đổi. Vì vậy, cho rằng, chúng ta phải render trên phía máy chủ anyway.

  3. Ngay cả khi bạn tái khử trùng trên phía máy chủ, cho phép khách hàng thực hiện hiển thị rõ ràng sẽ xóa sự tin tưởng mà bạn có thể có trong phiên bản được hiển thị thực sự được tạo từ Markdown. Hãy tưởng tượng như sau:

    tôi, một spammer ác, gửi câu trả lời sau đây:

    As you can sea on [this awesome site][1], 
    
    ... (long text on thread-safe usage of the turtle in LOGO) ... 
    
    Hope that helps! 
    
    [1]: http://almost-real-rolex-watches.biz 
    

    Nhưng tôi gửi một phiên bản render trong đó liên kết thực sự đi đến một trang web có liên quan về những phức tạp của rùa đồng thời. Vì máy chủ mong đợi cả nguồn Markdown và HTML được hiển thị từ tôi, nên nó tin tưởng rằng một cái đã được tạo từ cái kia.

    Cùng đi kèm Sean Sceat, người dùng Stack Overflow nổi tiếng với danh tiếng 120k chỉ trong thẻ biểu trưng. Ông thấy rằng liên kết thực sự đi đến một trang có liên quan, thích câu trả lời, upvotes nó, đăng một "câu trả lời tuyệt vời; các trang web bạn liên kết đến có tấn nội dung hữu ích!" bình luận, và trong khi anh ấy ở đó, anh ấy sửa lỗi đánh máy "biển" -> "xem" (mà người gửi spam đã cố tình thực hiện).

    Nhưng Markdown nằm trong trình chỉnh sửa sau khi nhấp vào "chỉnh sửa" đã không chứa liên kết có liên quan nữa; nó chứa liên kết Rolex. Và do đó, – không được biết đến với Sean – anh ta không chỉ sửa lỗi đánh máy, mà còn thay đổi liên kết để truy cập trang web của người gửi spam.

    Bây giờ bạn có một bài đăng có chỉnh sửa cuối cùng đến từ một người dùng đáng tin cậy, xác nhận câu trả lời, nhưng với một liên kết mà chúng tôi không muốn mọi người nhấp vào.

    Và lịch sử sửa đổi (xem điểm 2.), thậm chí sẽ không hiển thị rằng liên kết đã được thay đổi.

Cần lưu ý rằng phiên bản gốc của trình chỉnh sửa JavaScript WMD thực sự có chức năng bạn mô tả; bạn có thể thiết lập nó để gửi HTML được hiển thị tới máy chủ. Cuối cùng chúng tôi đã xóa chức năng đó khi chúng tôi xuất bản phiên bản được cấu trúc lại của chúng tôi dưới tên "PageDown", vì chúng tôi chưa bao giờ sử dụng nó, duy trì nó và tôi thành thật không biết liệu nó có thực sự hoạt động nữa hay không.

+0

Sự cố 2 và 3 chỉ xảy ra nếu máy chủ xử lý phiên bản được hiển thị và tôi không thấy lý do tại sao điều này có thể xảy ra nếu khách hàng thực hiện tất cả hiển thị. Chỉ cần để máy chủ xử lý phiên bản Markdown độc quyền. Tất nhiên, lý do 1 là đủ hấp dẫn một mình. Nhưng tôi không hiểu 2 hoặc 3. –

+1

@KonradRudolph Bạn có nghĩa là trang sẽ chỉ nhận được nguồn Markdown và khách hàng sẽ hiển thị HTML khi ai đó xem trang? Điều đó có nghĩa là Google (và mọi người khác không chạy JavaScript) không bao giờ thấy nội dung. Ngoài ra, câu hỏi là về việc gửi nội dung trả về cho máy chủ. – balpha

+0

Vâng, Google cũng sẽ thấy trang có nội dung Markdown được nhúng. Nhưng vâng, tôi không nghĩ vậy. –

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