Linux与Unix安全编程之输入验证
1. 输入验证的重要性
在编程过程中,对所有输入进行验证是确保程序安全稳定运行的关键。输入来源广泛,包括文件描述符、文件名、文件内容、基于Web的应用输入等,若处理不当,可能会引发严重的安全问题,如攻击者利用输入漏洞执行任意指令、破坏数据等。
2. 文件描述符处理
2.1 基本概念
程序会接收到一组“打开的文件描述符”,即预先打开的文件。对于setuid/setgid程序,用户可以选择打开哪些文件,程序不能假设打开新文件会总是分配固定的文件描述符ID,也不能假定标准输入、输出和错误输出一定指向终端或已打开。
2.2 安全风险
攻击者可以在程序启动前打开或关闭文件描述符,从而制造意外情况。例如,攻击者关闭标准输出后,程序打开的下一个文件会被当作标准输出,导致所有标准输出都被发送到该文件。部分C库会在标准输入、输出和错误输出未打开时自动将其打开到 /dev/null ,但并非所有Unix-like系统都支持,且存在因竞态条件导致自动打开失败的可能。
2.3 处理建议
程序在处理文件描述符时,要充分考虑用户的选择,不做不合理的假设,确保程序在各种情况下都能正常运行。
3. 文件名验证
3.1 文件名带来的问题
文件名在某些情况下可能会引发严重问题,尤其是在存在本地不可信用户的计算机上运行的安全程序。远程用户可能会诱使程序创建不良文件名,或者利用文件名漏洞进一步渗透系统。
超级会员免费看
订阅专栏 解锁全文
2523

被折叠的 条评论
为什么被折叠?



