• 不安全函数(转)


    这些函数由于设计的时候比较淳朴,并没有做任何的越界检测,主要容易”被溢出”,只需要多设点检查边界,即安全。

    函数 严重性 解决方案
    gets 最危险 使用 fgets(buf, size, stdin)。这几乎总是一个大问题!
    strcpy 很危险 改为使用 strncpy。
    strcat 很危险 改为使用 strncat。
    sprintf 很危险 改为使用 snprintf,或者使用精度说明符。
    scanf 很危险 使用精度说明符,或自己进行解析。
    sscanf 很危险 使用精度说明符,或自己进行解析。
    fscanf 很危险 使用精度说明符,或自己进行解析。
    vfscanf 很危险 使用精度说明符,或自己进行解析。
    vsprintf 很危险 改为使用 vsnprintf,或者使用精度说明符。
    vscanf 很危险 使用精度说明符,或自己进行解析。
    vsscanf 很危险 使用精度说明符,或自己进行解析。
    streadd 很危险 确保分配的目的地参数大小是源参数大小的四倍。
    strecpy 很危险 确保分配的目的地参数大小是源参数大小的四倍。
    strtrns 危险 手工检查来查看目的地大小是否至少与源字符串相等。
    realpath 很危险(或稍小,取决于实现) 分配缓冲区大小为 MAXPATHLEN。同样,手工检查参数以确保输入参数不超过 MAXPATHLEN。
    syslog 很危险(或稍小,取决于实现) 在将字符串输入传递给该函数之前,将所有字符串输入截成合理的大小。
    getopt 很危险(或稍小,取决于实现) 在将字符串输入传递给该函数之前,将所有字符串输入截成合理的大小。
    getopt_long 很危险(或稍小,取决于实现) 在将字符串输入传递给该函数之前,将所有字符串输入截成合理的大小。
    getpass 很危险(或稍小,取决于实现) 在将字符串输入传递给该函数之前,将所有字符串输入截成合理的大小。
    getchar 中等危险 如果在循环中使用该函数,确保检查缓冲区边界。
    fgetc 中等危险 如果在循环中使用该函数,确保检查缓冲区边界。
    getc 中等危险 如果在循环中使用该函数,确保检查缓冲区边界。
    read 中等危险 如果在循环中使用该函数,确保检查缓冲区边界。
    bcopy 低危险 确保缓冲区大小与它所说的一样大。
    fgets 低危险 确保缓冲区大小与它所说的一样大。
    memcpy 低危险 确保缓冲区大小与它所说的一样大。
    snprintf 低危险 确保缓冲区大小与它所说的一样大。
    strccpy 低危险 确保缓冲区大小与它所说的一样大。
    strcadd 低危险 确保缓冲区大小与它所说的一样大。
    strncpy 低危险 确保缓冲区大小与它所说的一样大。
    vsnprintf 低危险 确保缓冲区大小与它所说的一样大。




  • 相关阅读:
    java.lang.IllegalArgumentException: No converter found for return value of type: class XXX.XXXX
    关于websocket集群中不同服务器的用户间通讯问题
    JavaScript中 location.host 与 location.hostname 的区别
    Spring在代码中获取bean的几种方式
    在websocket中怎么样注入service类
    阿里云上部署kafka--遇到的坑
    linux系统部署Java程序获取ip时报Caused by: java.net.UnknownHostException: XXXXXXXXXX: XXXXXXXXXX: Name or service not known
    解决bash: mysql: command not found 的方法
    Nginx的启动、停止与重启
    Java8:Lambda表达式增强版Comparator和排序
  • 原文地址:https://www.cnblogs.com/liuzhanshan/p/5277685.html
Copyright © 2020-2023  润新知