diff --git "a/C,C++\345\256\211\345\205\250\346\214\207\345\215\227.md" "b/C,C++\345\256\211\345\205\250\346\214\207\345\215\227.md" index 57d135b..b91a003 100644 --- "a/C,C++\345\256\211\345\205\250\346\214\207\345\215\227.md" +++ "b/C,C++\345\256\211\345\205\250\346\214\207\345\215\227.md" @@ -33,7 +33,8 @@ + [3.1 变量应确保线程安全性](#1.3.1) + [3.2 注意signal handler导致的条件竞争](#1.3.2) + [3.3 注意Time-of-check Time-of-use条件竞争](#1.3.3) - * [IV. 加密解密](#1.4) + + [3.4 注意不可重入函数](#1.3.4) + [IV. 加密解密](#1.4) + [4.1 不得明文存储用户密码等敏感数据](#1.4.1) + [4.2 内存中的用户密码等敏感数据应该安全抹除](#1.4.2) + [4.3 rand() 类函数应正确初始化](#1.4.3) @@ -1074,6 +1075,27 @@ TOCTOU难以修复,但是有以下缓解方案: `中风险-逻辑问题` + +#### 3.4 【建议】注意不可重入函数 + +不可重入函数:是指这样的一类函数,不可以在它还没有返回就再次被调用。例如printf,malloc,free等都是不可重入函数。函数不可重入大多数是因为在函数中引用了全局变量。例如,printf会引用全局变量stdout,malloc,free会引用全局的内存分配表。 + +不可重入函数,在多线程下可能无法达成预期结果,参考列表如下: + +1. rand、srand +2. asctime、ctime、localtime、gmtime +3. getenv、getenv_s +4. strtok +5. strerror +6. setlocale +7. atomic_init +8. gethostbyaddr、gethostbyname +9. inet_ntoa + +关联漏洞: + +`中风险-逻辑问题` + ### 4 加密解密