Dữ liệu trong cơ sở dữ liệu của bạn có thực sự là HTML hay dữ liệu ứng dụng như tên hoặc nhận xét bạn vừa biết sẽ kết thúc như một phần của trang HTML?
Nếu đó là dữ liệu ứng dụng, tôi nghĩ rằng nó tốt nhất để:
- đại diện nó trong một hình thức mà nguồn gốc từ môi trường (ví dụ unencoded trong cơ sở dữ liệu), và
- chắc chắn nó đúng dịch khi nó vượt qua ranh giới đại diện (mã hóa khi bạn tạo trang HTML).
Nếu bạn là người hâm mộ MVC, điều này cũng giúp tách chế độ xem/bộ điều khiển khỏi mô hình (và từ định dạng lưu trữ liên tục).
Đại diện
Ví dụ, giả sử một người nào đó để lại nhận xét "Tôi yêu M & Bà". Nó có thể dễ dàng nhất để đại diện cho nó trong mã như chuỗi văn bản thuần túy "I love M&Ms"
, không phải là chuỗi mã hóa HTML "I love M&Ms"
. Về mặt kỹ thuật, dữ liệu như nó tồn tại trong mã không phải là HTML và cuộc sống là dễ nhất nếu dữ liệu được biểu diễn đơn giản như chính xác nhất có thể. Dữ liệu này sau này có thể được sử dụng trong một chế độ xem khác, ví dụ: ứng dụng trên máy tính để bàn. Dữ liệu này có thể được lưu trữ trong cơ sở dữ liệu, tệp phẳng hoặc trong tệp XML, có thể sau này được chia sẻ với một chương trình khác. Đơn giản nhất của nó cho các chương trình khác để giả sử chuỗi là trong "bản địa" đại diện cho các định dạng: "I love M&Ms"
trong một cơ sở dữ liệu và tập tin phẳng và "I love M&Ms"
trong tệp XML. Tôi sẽ cringe để xem giá trị mã hóa HTML được mã hóa trong một tập tin XML ("I love &Ms"
).
Dịch
Sau đó, khi dữ liệu được sắp qua ranh giới đại diện (ví dụ như hiển thị dưới dạng HTML, lưu trữ trong một cơ sở dữ liệu, tập tin văn bản đơn giản, hoặc tập tin XML), sau đó nó quan trọng để đảm bảo rằng nó được dịch đúng cách để nó được thể hiện chính xác theo định dạng có nguồn gốc từ môi trường tiếp theo đó. Trong ngắn hạn, khi bạn đi để hiển thị nó trên một trang HTML, hãy chắc chắn nó được dịch sang HTML được mã hóa đúng (thủ công hoặc thông qua một công cụ) để giá trị được hiển thị chính xác trên trang. Khi bạn đi lưu trữ nó trong cơ sở dữ liệu hoặc sử dụng nó trong một truy vấn, sử dụng các lệnh thoát và/hoặc các câu lệnh chuẩn bị và biến ràng buộc để đảm bảo cùng một giá trị khái niệm được biểu diễn chính xác tới cơ sở dữ liệu. Khi bạn đi lưu trữ nó trong một tệp XML, bạn đảm bảo mã hóa XML của nó.
Không dịch đúng khi vượt qua ranh giới đại diện là nguồn tiêm tấn công các cuộc tấn công SQL injection như vậy. Hãy tận tâm điều đó bất cứ khi nào bạn đang làm việc với nhiều biểu diễn/ngôn ngữ (ví dụ: Java, SQL, HTML, Javascript, XML, v.v.).
-
Mặt khác, nếu bạn đang thực sự cố gắng để lưu các mảnh trang HTML sang cơ sở dữ liệu, sau đó tôi không rõ ràng bởi những gì bạn có nghĩa là bằng cách "mã hóa trước khi được lưu trữ". Nếu đó là HTML hợp lệ, tất cả các giá trị cần thiết phải được mã hóa (ví dụ: &
, <
, v.v ...).
Các phương pháp hay nhất thường là wiki cộng đồng. :) – bzlm