aug*_*tin 5 c++ security format boost
我开始使用boost/format.
使用boost/format进行编码时,在安全性方面我应该注意什么?
我可以在不关心安全性的情况下执行以下操作吗?
std::cout << boost::format("Hello %2%! Do you want to %1%?")
% user_supplied_str1 % user_supplied_str2 << std::endl;
Run Code Online (Sandbox Code Playgroud)
在使用boost/format时,安全性会出现问题的情况是什么?
你的例子是安全的。事实上,它是安全的printf
。与 Boost.Format一样printf
,Boost.Format 仅解析其格式字符串一次,因此没有机会插入额外的格式说明符。传递不完整的format
对象会boost::format
引发异常。
我猜你担心的是格式字符串漏洞。我认为使用 Boost.Format 是不可能实现的。Cowan等人printf
总结了脆弱的原因。:
%n
允许写入任意内存位置。varargs
不允许参数计数,因此字符串可以打印出整个堆。varargs
不是类型安全的。Ad (1)%n
已从Boost.Format 中省略,“因为它不适合此上下文”。varargs
Ad (2),当参数数量不符合格式字符串时,Boost.Format 不使用并抛出异常。Ad (3),这个问题已经解决,因为 的参数是operator%
在编译时检查的。
(我只是试图让 Boost.Format 使用自定义格式字符串打印内存中 C 字符串的地址,但它不允许我这么做。)
此外,sprintf
由于字符串是动态分配的,因此避免了缓冲区溢出。
如果您想安全起见,请不要使用来自不受信任来源的格式字符串。
归档时间: |
|
查看次数: |
551 次 |
最近记录: |