我在Perl变量,模式等中阅读了很多关于Taint
的内容,例如来自docs:
$AUTOLOAD
现在可以被污染了如果您通过受污染的名称调用子例程,并且如果它遵循
AUTOLOAD
函数,那么$AUTOLOAD
将被(正确)污染。
虽然谷歌“污点”这个词的定义是:
污点的定义
动词
- 污染或污染(某物) “空气被汽车的烟雾污染了” 同义词:污染,污染,掺假,感染,枯萎,破坏,土壤,废墟,破坏,befoul
醇>名词
- 一种不良或不良品质或物质的痕迹 “政权坚持腐败的污点” 同义词:痕迹,触摸,暗示,提示,色调,污点,污点,瑕疵,耻辱,黑色标记,抹黑,耻辱,耻辱,羞耻
醇>
那么Taint
在Perl中的含义是什么?
答案 0 :(得分:4)
污点模式
Perl在检测到程序运行时使用不同的真实有效用户或组ID时,会自动启用一组特殊的安全检查,称为污点模式。 Unix权限中的setuid位是模式04000,setgid位模式为02000;可以设置其中之一或两者。您还可以使用 -T 命令行标志显式启用污染模式。对于服务器程序以及代表其他人运行的任何程序(例如CGI脚本),建议使用此标志强烈。一旦启用了污点模式,它就会启动剩余的脚本。
在此模式下,Perl采取了一种称为污点检查的特殊预防措施,以防止明显和微妙的陷阱。其中一些检查相当简单,例如验证路径目录是否可由其他人写入;细心的程序员总是使用这样的检查。但是,其他检查最好由语言本身支持,特别是这些检查有助于使set-id Perl程序比相应的C程序更安全。
您不得使用从程序外部派生的数据来影响程序之外的其他内容 - 至少不是偶然的。所有命令行参数,环境变量,区域设置信息(请参阅perllocale),某些系统调用的结果(
readdir()
,readlink()
,shmread()
的变量,返回的消息msgrcv()
,getpwxxx()
调用返回的密码,gcos和shell字段)以及所有文件输入都标记为" tainted"。受污染的数据不能在任何调用子shell的命令中直接或间接使用,也不能在任何修改文件,目录或进程的命令中使用....
答案 1 :(得分:4)
简而言之:任何来自外部且因此无法控制程序的数据都会被标记为污染。系统或执行程序等敏感操作拒绝处理这些受污染的数据,您需要通过验证其内容来清除数据。正确使用可以防止命令注入和类似问题。
答案 2 :(得分:0)
污点是您的程序从外部来源读取的数据。这些数据可能会导致您的程序表现出与预期不同的行为。此类数据在程序中使用前应进行自省。