2010-02-21 35 views
5

Lưu ý: Tôi quan tâm đến việc phun SQL và thoát ra ở nơi khác - câu hỏi này chỉ là về lọc đầu vào, cảm ơn.Lọc đầu vào của người dùng - tôi có cần lọc HTML không?

Tôi đang ở giữa việc tái cấu trúc chức năng lọc đầu vào của người dùng. Trước khi đi qua các tham số GET/POST để một bộ lọc loại cụ thể với filter_var() tôi thực hiện như sau:

Bây giờ là câu hỏi: bạn có chuyển thông số thành bộ lọc như htmLawed hoặc HTML Purifier hoặc tôi có thể nghĩ đầu vào là an toàn không? Dường như với tôi rằng hai sự khác biệt này chủ yếu dựa trên độ chi tiết của các thành phần và thuộc tính HTML được phép (mà tôi không quan tâm, khi tôi xóa mọi thứ), nhưng tài liệu htmLawed có phần về 'dangerous characters' cho thấy có thể có lý do để dùng nó. Trong trường hợp này, những gì sẽ là một cấu hình lành mạnh cho nó?

+0

Ký tự nguy hiểm có thể là ký tự điều khiển UTF-8. – Jacco

+0

Bất kỳ đề xuất nào về cách loại bỏ chúng? – djn

+1

Tôi không thực sự nhận được lưu ý của bạn, SQL Injection là tất cả về ngăn chặn đầu vào người dùng khó chịu trong một truy vấn sql. Trong thực tế, phần lớn các lỗ hổng là do INPUT khó chịu, không phải đầu ra. Chúng được gọi là lỗ hổng "Taint và Sink". – rook

Trả lời

2

Có rất nhiều cách tiếp cận khác nhau để XSS mà được an toàn. Lý do duy nhất để biết liệu phương pháp tiếp cận của bạn có giữ nước hay không là kiểm tra mặc dù khai thác. Tôi khuyên bạn nên sử dụng Free XSS vulnerability Scanner * hoặc mã nguồn mở wapiti.

Thành thật mà nói tôi sẽ không bao giờ sử dụng strip_tags() vì bạn không phải lúc nào cũng cần thẻ html để thực thi javascript! Tôi thích htmlspecialchars($var,ENT_QUOTES);.

Đối với trường hợp này là dễ bị tổn thương XSS:

print('<A HREF="http://www.xssed.com/'.strip_tags($_REQUEST[xss]).'">link</a>'); 

Bạn không cần <> để thực thi javascript trong trường hợp này bởi vì bạn có thể sử dụng onmouseover, đây là một cuộc tấn công ví dụ:

$_REQUEST[xss]='" onMouseOver="alert(/xss/)"'; 

ENT_QUOTES sẽ xử lý các dấu ngoặc kép sẽ vá lỗ hổng XSS này.

* Tôi liên kết với trang web/dịch vụ này.

+0

Điểm rất tốt! Cảm ơn bạn! Tôi đã tìm thấy danh sách các sự kiện tại http: // php.net/manual/en/function.strip-tags.php # 82180 và chuyển mảng tới str_ireplace() - điều này sẽ giải quyết nó. – djn

+1

Vui lòng lưu ý hướng dẫn [khuyến mãi] (http://stackoverflow.com/faq#promotion). –

0

tôi nghĩ rằng những gì bạn đang làm là an toàn, ít nhất là từ quan điểm của tôi không có mã html sẽ nhận được thông qua bộ lọc của bạn

+0

-1 Vâng, nhưng javascript vẫn có thể làm cho nó mặc dù các bộ lọc này. – rook

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