sprintf为什么有安全隐患
来源:互联网 发布:初音未来mmd动作数据 编辑:程序博客网 时间:2024/04/29 14:40
先来看一小段代码
#include <stdio.h>int main(){char buf[12] = {0};char *str = "ab";sprintf(buf, "hello :%s\n", str);printf("%s\n", buf);return 0;}
编译并运行以上程序,会打印输出
hello :ab
然而,当把程序改成
#include <stdio.h>int main(){char buf[12] = {0};char *str = "abcdefgh";sprintf(buf, "hello :%s\n", str);printf("%s\n", buf);return 0;}
再编译运行,程序可以正常编译,但是当运行程序时,程序就会终止,并报错
Abort trap: 6说明sprintf函数是存在安全隐患的,可能当编写程序时,str变量可能会保存不同的内容,而且有很大可能出现上述安全隐患,
因此推荐使用sprintf安全改进版snprintf函数。
继续上边的例子
<pre name="code" class="plain">#include <stdio.h>int main(){char buf[12] = {0};char *str = "abcdefgh";snprintf(buf, sizeof(buf), "hello :%s\n", str);printf("%s\n", buf);return 0;}
对其中的参数做一下说明,第一个为目标字符串,第二个目标字符串的长度,第三个为原串。
安全性体现在哪里呢?第二个参数。
当要存储的字符串长度大于目标字符串长度时,会只保存目标串长度-1长度的字符串,并在末尾补\0字符串结束符。因此无论对str字符串作何处理,当使用snprintf时都能确保程序可以正常运行,从而提高程序的健壮性,不至于崩溃退出。
至于sprintf源代码细节有待进一步研究。
0 0
- sprintf为什么有安全隐患
- AJAX也有安全隐患
- 如何判断手机浏览器是否有安全隐患?
- 为什么snprintf比sprintf更安全?(另外,请注意, Windows和Linux中的snprintf函数有区别)
- 为什么snprintf比sprintf更安全?(另外,请注意, Windows和Linux中的snprintf函数有区别)
- AJAX也有安全隐患 谈谈AJAX的安全性
- AJAX也有安全隐患 谈谈AJAX的安全性
- AJAX也有安全隐患 谈谈AJAX的安全性
- AJAX也有安全隐患 谈谈AJAX的安全性
- 我国74万域名服务器有一半存在安全隐患
- AJAX也有安全隐患 谈谈AJAX的安全性
- AJAX也有安全隐患,谈谈AJAX的安全性
- sprintf
- sprintf
- sprintf
- sprintf
- sprintf
- sprintf()
- [Python] Python 之 __new__() 方法与实例化
- sql 面试题目
- BZOJ2763 [JLOI2011]飞行路线(分层图最短路)
- LeetCode-Contains Duplicate-解题报告
- 最大公约数与递归
- sprintf为什么有安全隐患
- gh0st支持win7和win8
- VC++通过API连接MySQL
- 几种任务调度的 Java 实现方法与比较
- 在OS X中安装配置JDK
- LeetCode-Combination Sum III-解题报告
- iOS protocol buffer的使用
- 【Leetcode】Isomorphic Strings
- MySQL的数据类型