我想知道可以输入参数main()
在运行时更改。换句话说,我们是否应该保护应用程序免受可能的影响TOCTTOU https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use处理数据时的攻击argv
?目前,我不知道有什么方法可以更改传入的数据argv
,但我不确定这种方式是否不存在。
UPD:我忘了指出,我对从程序外部更改 argv 感到好奇,因为 argv 是从程序外部接受的。
我想说根据你的情况有两个主要选择威胁模型 https://en.wikipedia.org/wiki/Threat_model here:
您不信任环境,并假设计算机上的其他特权进程能够在程序运行时更改程序的内存内容。如果是这样,没有什么是安全的,该程序可以更改为按字面意思执行anything。在这种情况下,您甚至不能信任整数比较。
您信任程序运行的环境。在这种情况下,您的程序是其数据的唯一所有者,并且只要您没有明确决定更改argv
或任何其他数据,您都可以信赖它。
第一种情况,防不防并不重要argv
修改,因为你不信任执行环境,所以即使是那些守卫也可能被愚弄。在第二种情况下,您信任执行环境,因此您不需要首先防范该问题。
对于上述两种情况,答案都是:no,在处理以下数据时,您不应该保护应用程序免受可能的 TOCTTOU 攻击argv
.
TOCTTOU https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use此类问题通常源于外部不可信数据,可以由其他人修改,并且根据定义不应信任。一个简单的例子是文件的存在:您不能依赖它,因为计算机上的其他用户或程序可以删除或移动它,确保该文件可以使用的唯一方法是尝试打开它。如果是argv
,数据不是外部的,并且由进程本身拥有,所以这个问题确实不适用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)