20、编程安全深度剖析:缓冲区溢出、PHP 安全及用户输入处理

编程安全深度剖析:缓冲区溢出、PHP 安全及用户输入处理

1. 缓冲区溢出问题

缓冲区溢出是用户输入影响程序执行和性能的典型示例。在编写 C 程序时,务必使用能进行缓冲区边界检查的例程,否则攻击者可能会溢出缓冲区,导致程序出错,甚至执行恶意代码。

1.1 gets() 函数示例

gets() 函数可从标准输入读取一行用户输入,但它不进行缓冲区溢出检查。以下是一个使用 gets() 的示例代码:

/* gets_exa,ple.c – Why not to use gets() */
#include <stdio.h>
void main() {
    char username[20];
    printf("Please enter your username:   ");
    gets(username);
    printf("%s\n", username);
}

当用户输入不超过 20 个字符时,程序能正常运行;但当输入过长时,程序会崩溃,如:

linux6$ gets_example
Please enter your username:   anonymousaaaaaaaaaaaaaaaa55555555555555555555555
➥55555555555555555
anonymousaaaaaaaaaaaaaaaa5555555555555555555555555555555555555555
Bus error (core dumped)
linux6$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值