2012-05-03 54 views
11

Tôi có một trang mà tôi muốn chấp nhận một địa chỉ email trong các tham số GET. Nếu tôi sử dụng FILTER_VALIDATE_EMAIL, tôi vẫn dễ bị tấn công xss và javascript injection hay không?FILTER_VALIDATE_EMAIL của PHP có cung cấp bảo mật đầy đủ không?

Tôi không hỏi liệu trình kiểm tra địa chỉ email có tốt hay đủ hay không. Tôi muốn biết nếu một người vẫn có thể tiêm mã web xấu thông qua các chuỗi tùy ý được truyền qua nó - tôi có cần phải lọc bổ sung để ngăn chặn điều đó không?

Trả lời

9

có, địa chỉ email hợp lệ có thể được sử dụng làm vùng chứa cho một số chuỗi được tạo cẩn thận.

thoát khỏi suy nghĩ "lọc" và đi vào tư duy "thoát". Bộ lọc "làm cho an toàn" phổ biến chỉ đơn giản là không tồn tại. Ví dụ:

ví dụ: nếu địa chỉ email sẽ được xuất sang tài liệu văn bản thuần túy thì không cần làm gì cả. nếu nó được đưa vào một tài liệu html, như là một nút văn bản, sau đó nó cần phải được thoát cho html ký tự đặc biệt và entitites. nếu nó được đưa vào một tài liệu html, và giá trị của nó sẽ nằm bên trong một thuộc tính html, thì việc thoát rất cẩn thận sẽ cần được thực hiện và nó sẽ phụ thuộc vào ngữ cảnh. nếu nó đang được sử dụng trong một truy vấn sql, thì nó cần phải được thoát qua chức năng thoát cơ sở dữ liệu cụ thể. và vân vân.

đó là tất cả về ngữ cảnh sử dụng, không phải nội dung của chuỗi. điều này đi cho tất cả mọi thứ (không chỉ email hoặc đầu vào người dùng khác), và nó không chỉ là vấn đề bảo mật, mà còn là vấn đề chính xác về lập trình.

fyi, tôi nhớ thông số địa chỉ email cho phép chuỗi được trích dẫn, vì vậy, chẳng hạn như "<script>alert('xss')</script>"@example.com sẽ hợp lệ. các possibibilites là hiển nhiên.

+1

Ví dụ, không có lời chào" an toàn ". Điều gì lịch sự trong một số xã hội là thô lỗ ở những người khác. Biết bối cảnh của bạn! – Xeoncross

+1

+1. FILTER_VALIDATE_EMAIL là để kiểm tra xem địa chỉ e-mail có hợp lệ hay không và như ví dụ trên cho thấy, không có gì liên quan đến bất kỳ vấn đề tiêm nào khác. Nếu nó * đã * chặn dấu ngoặc kép hoặc ít hơn, thì nó sẽ chỉ là do đồng tỷ lệ và sẽ không phải là thứ bạn nên dựa vào. – bobince

2

Điều đó là đủ tốt, nhưng tự nhiên bạn vẫn nên thoát khỏi khi nhập vào cơ sở dữ liệu, v.v. Bạn không bao giờ biết loại lỗi nào có thể tồn tại trong PHP hoặc Apache, v.v. .

+5

Không có gì để làm với lỗi. Các địa chỉ email hợp lệ không tự động an toàn cho cơ sở dữ liệu. Email 'john.o'connor @ somewhere.com' sẽ cho bạn đau buồn nếu bạn chỉ cần tiêm vào một truy vấn SQL ... – Cylindric

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