2010-10-22 19 views
5

Tôi bắt đầu sử dụng tăng/định dạng.Các tác động bảo mật của việc sử dụng tăng/định dạng là gì?

Khi mã hóa với quảng cáo/định dạng, tôi nên chú ý đến vấn đề bảo mật như thế nào?

Tôi có thể thực hiện những điều sau đây mà không lo ngại về bảo mật không?

std::cout << boost::format("Hello %2%! Do you want to %1%?") 
    % user_supplied_str1 % user_supplied_str2 << std::endl; 

Tình huống an ninh sẽ là vấn đề khi sử dụng tăng/định dạng là gì?

Trả lời

3

Ví dụ của bạn an toàn. Trong thực tế, nó đã được an toàn với printf. Giống như printf, Boost.Format chỉ phân tích cú pháp chuỗi định dạng của nó một lần, vì vậy không có cơ hội chèn thêm định dạng specifier. Chuyển một đối tượng format không đầy đủ đến boost::format ném ngoại lệ.

Tôi đoán điều bạn sợ là format string exploits. Đó là, tôi nghĩ, không thể sử dụng Boost.Format. Những lý do tại sao printf là dễ bị tổn thương được tóm tắt bởi Cowan et al.:

  1. %n cho phép bằng văn bản cho vị trí bộ nhớ tùy ý.
  2. varargs không cho phép tính đối số, do đó, chuỗi có thể in toàn bộ vùng.
  3. varargs không an toàn kiểu.

quảng cáo (1), %n đã omitted từ Boost.Format "vì nó không phù hợp trong bối cảnh này." Quảng cáo (2), Boost.Format không sử dụng varargs và ném ngoại lệ khi số đối số không phù hợp với chuỗi định dạng. Quảng cáo (3), điều này được giải quyết vì các đối số cho operator% được kiểm tra tại thời gian biên dịch.

(Tôi chỉ cố gắng để có được Boost.Format để in địa chỉ của một chuỗi C trong bộ nhớ sử dụng một chuỗi định dạng tùy chỉnh, và nó sẽ không cho phép tôi.)

Hơn nữa, lỗi tràn bộ đệm trong sprintf là tránh vì chuỗi được phân bổ động.

Nếu bạn muốn ở bên an toàn, không sử dụng chuỗi định dạng từ các nguồn không đáng tin cậy.

1

Nếu bạn muốn bảo mật về mặt in tương đương với thông số loại không chính xác hoặc tràn bộ đệm có thể thì tăng/định dạng là hoàn toàn tốt - ngay cả với chuỗi định dạng do người dùng cung cấp. Nhưng bạn phải ghi nhớ rằng nó có thể ném một ngoại lệ. Kiểm tra tài liệu về khi nào và những ngoại lệ nào được ném ra.

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