2011-02-03 39 views
25

Hi Tôi đã tự hỏi khi nào là nơi thích hợp để sử dụng htmlspecialchars(). Là nó trước khi chèn dữ liệu vào cơ sở dữ liệu hoặc khi lấy chúng từ cơ sở dữ liệu?khi nào sử dụng hàm htmlspecialchars()?

+1

sau khi được yêu cầu. –

Trả lời

26

Bạn chỉ nên gọi phương thức này khi lặp lại dữ liệu vào HTML.

Không lưu trữ HTML đã thoát trong cơ sở dữ liệu của bạn; nó sẽ làm cho các truy vấn khó chịu hơn.
Cơ sở dữ liệu sẽ lưu trữ dữ liệu thực tế của bạn, chứ không phải biểu diễn HTML của nó.

+0

Cảm ơn bạn. Nhưng khi tôi cố gắng lưu trữ các thẻ PHP vào cơ sở dữ liệu "", tôi sẽ không thể làm điều đó trừ khi tôi sử dụng htmlspecialchars() trước. – khr2003

+1

@ khr2003 không lưu trữ php trong db, đó không bao giờ là một ý tưởng hay. –

+1

Tôi đồng ý nhưng họ sẽ là một phần của bbcode khi chèn bài đăng. – khr2003

11

Bạn sử dụng htmlspecialcharsEVERY khi bạn xuất nội dung trong HTML, do đó nó được xen vào dưới dạng nội dung chứ không phải HTML.

Nếu bạn cho phép nội dung được coi là HTML, bạn vừa mới mở cửa cho các lỗi ở mức tối thiểu và tổng số lần tấn công XSS ở mức tồi tệ nhất.

+0

Bạn đang hiểu nhầm câu hỏi. – SLaks

4

Lưu chính xác điều mà người dùng nhập vào cơ sở dữ liệu. sau đó khi hiển thị công khai, sử dụng htmlspecialchars(), để nó cung cấp một số bảo vệ xss.

+0

Nhưng anh ấy hỏi ** TẠI SAO ** để làm như vậy ?? Bạn đã không cung cấp lý do trong câu trả lời của bạn. Hãy xem xét chỉnh sửa nó. –

0

Hướng dẫn - Làm thế nào để sử dụng htmlspecialchars() trong PHP

Để bắt đầu bạn phải hiểu 1 khái niệm đơn giản: Render.

Render là gì? Render là khi HTML biến

<b>Hello</b> 

để in đậm như thế này Xin chào. Đó là kết xuất.

Vì vậy, ... Khi nào thì sử dụng hàm htmlspecialchars()?

Bất cứ nơi nào bạn muốn hiển thị nội dung HTML. Ví dụ, nếu bạn đang sử dụng JQuery và bạn làm điều này:

$("#YourDiv").html("<b>Hello</b>"); 

Nội dung div sẽ Xin chào. Nó đưa văn bản vào HTML.

Nếu bạn muốn hiển thị thông điệp theo cách này (được viết bởi người sử dụng):

<b>Hello</b> 

bạn cần phải đặt:

$("#YourDiv").text("<b>Hello</b>"); 

Bằng cách đó Hello sẽ không bao giờ được trả lại.

Nếu bạn muốn tải sứ điệp (như viết của thành viên) vào một textbox, textarea, vv ... Bạn có phải đặt:

<input type="text" class="Texbox1" value=""> 

<script> 
$(".Textbox1").val("<b>Hello</b>"); 
</script> 

Điều đó sẽ hiển thị

<b>Hello</b> 

Bên trong Textbox không có vấn đề gì.

Kết luận:

gì bao giờ hết dữ liệu người dùng nhập vào các biểu mẫu, vv ... Lưu dữ liệu như bình thường. Không sử dụng bất kỳ chức năng nào. Nếu người dùng gửi 12345, hãy lưu nó. Không lọc gì cả. Bạn chỉ phải lọc khi bạn sẽ hiển thị dữ liệu trong trang cho người dùng. BẠN, CHỈ BẠN quyết định xem bạn có muốn hiển thị hay không những gì người dùng đã viết. *Nhớ lấy.

Trân trọng!

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