Perl Taint在一般意义上是什么意思

时间:2014-08-22 06:29:20

标签: perl

我在Perl变量,模式等中阅读了很多关于Taint的内容,例如来自docs

  

$AUTOLOAD现在可以被污染了

     

如果您通过受污染的名称调用子例程,并且如果它遵循AUTOLOAD函数,那么$AUTOLOAD将被(正确)污染。

虽然谷歌“污点”这个词的定义是:

  

污点的定义

     

动词

     
      
  1. 污染或污染(某物)   “空气被汽车的烟雾污染了”   同义词:污染,污染,掺假,感染,枯萎,破坏,土壤,废墟,破坏,befoul
  2.         

    名词

         
        
    1. 一种不良或不良品质或物质的痕迹   “政权坚持腐败的污点”   同义词:痕迹,触摸,暗示,提示,色调,污点,污点,瑕疵,耻辱,黑色标记,抹黑,耻辱,耻辱,羞耻
    2.   

那么Taint在Perl中的含义是什么?

3 个答案:

答案 0 :(得分:4)

来自perlsec - Taint Mode

  

污点模式

     

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)

污点是您的程序从外部来源读取的数据。这些数据可能会导致您的程序表现出与预期不同的行为。此类数据在程序中使用前应进行自省。