sprintf函数

php sprintf函数引起的sql注入

纵饮孤独 提交于 2020-03-12 04:48:58
sprintf函数作用: sprintf() 函数把格式化的字符串写入变量中。 arg1、arg2、++ 参数将被插入到主字符串中的百分号(%)符号处。该函数是逐步执行的。在第一个 % 符号处,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推。 注释:如果 % 符号多于 arg 参数,则您必须使用占位符。占位符位于 % 符号之后,由数字和 "\$" 组成 测试1.php文件: <?php $name = $_GET['name']; $name = mysql_escape_string(stripslashes($name)); $sql = sprintf("select * from product where name = '$name' and adddate <= '%s' limit 1",date("Y-m-d H:i:s")); echo $sql; ?> 由于函数处理了$name所以直接单引号是不能被注入的,如图 这个时候就要利用sprintf函数的特性了。 这样单引号就注入成功了。 来源: CSDN 作者: 黑面狐 链接: https://blog.csdn.net/qq1124794084/article/details/104802553

关于sprintf 和 snprintf的自拷贝

爷,独闯天下 提交于 2020-03-05 13:36:45
朋友出了这样一道题: char buf[100]; memset(buf, 0, 100); strcpy(buf, "hello"); sprintf(buf, "%s world\n", buf); printf("%s\n", buf); 结果是什么? 在不同的编译器上,结果不同,有的显示" world",有的显示"hello world",我们发现,对于这种自拷贝的问题,编译器可以有不同的策略,有的简单的把原先的值抹去,有的会保留,为了详细说明,我们自己动手写一个试试看。 【实践】: 思想:在内部创建一个临时buffer,去代替des,然后,实际操作sprintf/snprint,最后,把buffer中的内容导入des即可。 为了突出重点,这里只是针对%s作了处理,代码如下: test.cpp: #include <stdio.h> #include <string.h> #include <stdlib.h> /* * des : 目标buffer * size : 限定目标buffer的最大尺寸 * strategy : 当目标buffer与源buffer相同时,是否要拷贝原来的值 * 0 不拷贝 * 非0 拷贝 * return : 0 正确 * 非0 失败 */ int mysnprintf(char *des, size_t size, int strategy,

printf、sprintf与fprintf 的用法区分

 ̄綄美尐妖づ 提交于 2020-01-26 21:59:18
1: fprintf() #include <stdio.h> int fprintf( FILE *stream, const char *format, ... ); fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.因此fprintf()可以使得信息输出到指定的文件.比如 char name[20] = "Mary"; FILE *out; out = fopen( "output.txt", "w" ); if( out != NULL ) fprintf( out, "Hello %s\n", name ); 对于其输出格式参数,和printf()一样. fprintf()和printf()一样工作. fprintf()的返回值是输出的字符数,发生错误时返回一个负值. 在有些地方,有这样的定义:printf(...)=fprintf(stdout,...). 2:eg) fprintf函数的用法!2007-12-13 21:46 fprintf是用于文件操作的,原型是int fprintf( FILE *stream, const char *format [, argument ]...); 举例用法: #include <stdio.h> #include <process.h> FILE *stream; void

C语言中sprintf()函数的用法

淺唱寂寞╮ 提交于 2020-01-26 00:49:22
sprintf函数的用法 1、该函数包含在stdio.h的头文件中。 2、sprintf和平时我们常用的printf函数的功能很相似。sprintf函数打印到字符串中,而printf函数打印输出到屏幕上。sprintf函数在我们完成其他数据类型转换成字符串类型的操作中应用广泛。 3、sprintf函数的格式: int sprintf( char *string_buffer, const char *format_string[, args] ); 除了前两个参数固定外,可选参数可以是任意个。buffer是字符数组名;format是格式化字符串(像:"%3d%6.2f%#x%o",%与#合用时,自动在十六进制数前面加上0x)。只要在printf中可以使用的格式化字符串,在sprintf都可以使用。其中的格式化字符串是此函数的精华。 4、char str[20]; double f=14.309948; sprintf(str,"%6.2f",f); 可以控制精度 5、char str[20]; int a=20984,b=48090; sprintf(str,"%3d%6d",a,b); str[]="20984 48090" 可以将多个数值数据连接起来。 6、char str[20]; char s1[5]={'A','B','C'}; char s2[5]={'T','Y',

sprintf函数

浪尽此生 提交于 2020-01-23 13:01:03
  sprintf 是个变参函数,定义如下:     int sprintf( char *buffer, const char *format [, argument] ... ); 除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数: 格式化字符串上。 printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的 格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终 函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。 格式化数字字符串 sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代 itoa。如: //把整数123 打印成一个字符串保存在s 中。 sprintf(s, "%d", 123); //产生"123" 可以指定宽度,不足的左边补空格: sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567" 当然也可以左对齐: sprintf(s, "%-8d%8d", 123, 4567); //产生:"123 4567" 也可以按照16 进制打印: sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置

sprintf函数的用法

久未见 提交于 2020-01-18 04:24:19
自《CSDN 社区电子杂志——C/C++杂志》 在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。 sprintf 是个变参函数,定义如下: int sprintf( char *buffer, const char *format [, argument] ... ); 除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数: 格式化字符串上。 printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。 格式化数字字符串 sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代 itoa。 如: //把整数123 打印成一个字符串保存在s 中。 sprintf(s, "%d", 123); //产生"123" 可以指定宽度,不足的左边补空格: sprintf(s, "%8d%8d", 123,

C++:sprintf()的用法

家住魔仙堡 提交于 2020-01-16 23:28:17
转: http://blog.csdn.net/masikkk/article/details/5634886 更多: http://blog.csdn.net/zjuwispersure/article/details/6083982 在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。   sprintf 是个变参函数,定义如下:   int sprintf( char *buffer, const char *format [, argument] ... );   除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:   (1)格式化字符串上。   printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。   格式化数字字符串   sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf

sprintf详解

你。 提交于 2020-01-16 23:13:40
转摘声明:选自《CSDN 社区电子杂志——C/C++杂志》 在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。 sprintf 是个变参函数,定义如下: int sprintf( char *buffer, const char *format [, argument] ... ); 除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数: 格式化字符串上。 printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。 格式化数字字符串 sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代 itoa。 如: //把整数123 打印成一个字符串保存在s 中。 sprintf(s, "%d", 123); //产生"123" 可以指定宽度,不足的左边补空格: sprintf(s, "%8d%8d"

Linux C 字符串函数 sprintf()、snprintf() 详解

青春壹個敷衍的年華 提交于 2020-01-16 23:11:40
一、sprintf() 函数详解 在将各种类 型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。 由于 sprintf 跟 printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致 sprintf 比 printf 有用得多。所以本文着重介绍 sprintf,有时也穿插着用用 pritnf。 sprintf是个变参函数,定义如下: int sprintf ( char *buffer, const char *format [, argument] … ); 除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串上。 printf 和 sprintf 都使用格式化字符串来指 定串的格式,在格式串内部使用一些以“ % ”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要 的字符串。 1、格式化数字字符串 sprintf最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代itoa。如: // 把整数123打印成一个字符串保存在s中。 sprintf(s, "%d", 123); // 产生"123" 可以指定宽度

sprintf的用法

久未见 提交于 2020-01-16 23:07:38
正文:printf 可能是许多程序员在开始学习C 语言时接触到的第二个函数(我猜第一个是main),说 起来,自然是老朋友了,可是,你对这个老朋友了解多吗?你对它的那个孪生兄弟sprintf 了解多 吗?在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。 由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中, 后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。所以本文着重介绍sprintf,有时 也穿插着用用pritnf。 sprintf 是个变参函数,定义如下: int sprintf( char *buffer, const char *format [, argument] ... ); 除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数: 格式化字符串上。 printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的 格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终 函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。 格式化数字字符串 sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf