多年以来,Perl已经成为用于系统管理和WebCGI开发的功能最强的编程语言之一(几乎可以使用Perl做任何功能的程序)。但其扩展应用,即作为Internet上CGI的开发工具,使得它经常成为Web服务器上的攻击目标。

另外,大多数CGI脚本有着比一般用户更高的权限,导致它更容易受攻击。下面列举了一些开发者(特别是CGI程序员)可以使用的主动的预防性的措施来增强Perl代码的整体安全性(请注意:这不是Web服务器CGI脚本安全性的指导原则)。

1.1.1      Taint验证

Perl版本5.x包含一个叫做TaintChecking的数据验证措施。如果起用该功能,将不允许通过用户输入(任何程序外的输入)来操纵其他的外部程序(例如通过管道将数据导入另一个程序执行))。一般而言,程序员不能信任输入脚本和程序的数据(叫做Tainted数据),因为无法保证它不会产生危害(有意或者无意的)。Taint验证可以通过在命令行参数加入“-T”来开启。

例如:你可以在Perl脚本的第一行这样加入“-T”:

#!usr/bin/perl5-T

Tainted数据包括命令行参数、环境变量和来自文件的数据。引用tainted

数据的变量也称为tainted数据。如果脚本试图通过不安全的方式来使用tainted数据会产生一个致命错误(对这种情况称为“不安全的依赖”(Insecuredependency)或者其他的说法)。启用tainted验证在有些情况下会导致脚本停止运行,常常是由于Perl解释器要求所有脚本引用的外部程序的完全路径必须在PATH环境变量中列出,同时PATH中包含的每个目录除了目录的所有者及相应的所有者用户组外无法修改。Taint验证对于环境比较敏感,但是只要可能的话,应该使用taint验证,特别是代码执行其他程序功能时(例如在CGI脚本的情况下)。

1.1.2      安全模块

如果不但输入数据不可信而且实际的代码也不可信,例如用户从网站上下载了一个ActiveX控件,而它实际是一个特洛伊木马(Trojanhorse)。这种情况下taint验证就不起作用。安全模块让程序员可以在Perl脚本中将不同的代码模块与安全对象联系。每个安全对象对于运行的每块代码建立了一个限制的环境。这与chroot在一个进程中只能在整体目录结构的一个子目录中运行类似。而saft对象限制perl代码只能在perl包结构的某些特定包中运行。如何使用安全模式超出了本文的范围,但是程序员应该在任何时候尽量使用这一功能。

1.1.3      警告参数

使用-w参数可以在Perl解释脚本时显示所有的警告信息。警告可以在以下情况产生:只使用了一次的变量或者完全没有使用过得变量,未定义的文件句柄,未关闭的文件句柄,或者将非数值变量传递到数据变量。该功能不是针对安全处理的,但是可以有助于调试直接或者间接对安全有危害的错误。一般推荐总是使用-w参数。可以在taint验证时在第一行这样使用-w参数:

#!usr/bin/perl5-Tw

【安全开发】Perl安全编码规范的更多相关文章

  1. Android面试、开发之高手 编码规范与细节

    凝视 [规则1]必须用 javadoc 来为类生成文档.不仅由于它是标准.这也是被各种java 编译器都认可的方法. [规则2]在文件的開始部分应该有文件的说明信息,应包括例如以下信息: (1)版权信 ...

  2. Objective-C编码规范:26个方面解决iOS开发问题

    介绍 我们制定Objective-C编码规范的原因是我们能够在我们的书,教程和初学者工具包的代码保持优雅和一致.即使我们有很多不同的作者来完成不同的书籍. 这里编码规范有可能与你看到的其他Object ...

  3. Android开发编码规范(自用)

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持!   Android开发编码规范 目的及指导原则 目的 统一规范 Eclipse编辑环境 ...

  4. 不可小觑的Web开发编码规范

    http://www.csdn.net/article/2013-10-21/2817235-coding-conventions-in-web-development 摘要:编码规范是一套规章制度, ...

  5. ym——Android开发编码规范(自用)

    转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! Android开发编码规范 目的及指导原则 目的 统一规范 Eclipse编辑环境下J ...

  6. PHP开发编码规范

    (转载:https://blog.csdn.net/alexdream/article/details/2213313) 这些年来多从事Linux下PHP和C相关的开发,带过很多项目和团队,下面是根据 ...

  7. 一份比较全面的PHP开发编码规范.

    这些年来多从事Linux下PHP和C相关的开发,带过很多项目和团队,下面是根据经验整理的PHP编码规范,可以用作给大家的范例和参考,根据需要进行取舍和修改! (可能最新的一些php5的规范不够完整,今 ...

  8. 【安全开发】IOS安全编码规范

    申明:本文非笔者原创,原文转载自:https://github.com/SecurityPaper/SecurityPaper-web/blob/master/_posts/2.SDL%E8%A7%8 ...

  9. 【安全开发】Android安全编码规范

    申明:本文非笔者原创,原文转载自:https://github.com/SecurityPaper/SecurityPaper-web/blob/master/_posts/2.SDL%E8%A7%8 ...

随机推荐

  1. pom.xml设置maven的编码方式

    <build> <defaultGoal>compile</defaultGoal> <plugins> <plugin> <grou ...

  2. 为什么Java匿名内部类访问的外部局部变量或参数需要被final修饰

    大部分时候,类被定义成一个独立的程序单元.在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类,包含内部类的类也被称为外部类. class Outer { priv ...

  3. OSPF建立邻居、邻接关系 学习笔记

    Ospf中路由器之间存在两种连接关系:邻居关系和邻接关系.本博文将详细介绍这2种关系建立及工作原理. 如果两台路由器之间共享一条公共数据链路(两台路由器中间没有其它路由器,或者两台路由器之间存在虚连接 ...

  4. unity----------------------四元数的概念

    作者:Yang Eninala链接:https://www.zhihu.com/question/23005815/answer/33971127来源:知乎著作权归作者所有.商业转载请联系作者获得授权 ...

  5. Unity---------Mesh理解

    Mesh顾名思义“网格”,Unity3D里面所有的模型都是由Mesh组成的,UI也不例外. 例如下图,模型上的一个个小网格就是Mesh,这些Mesh有不同的三维顶点(Vector3),共同组成了一个3 ...

  6. Zookeeper系统设计的优点

    转自:Zookeeper系统设计的优点.http://webcache.googleusercontent.com/search?q=cache:s6fr40t_5ncJ:www.chaozh.com ...

  7. 初识ZooKeeper与集群搭建实例

    原文链接:http://www.linuxidc.com/Linux/2015-02/114230.htm zookeeper是什么 Zookeeper,一种分布式应用的协作服务,是Google的Ch ...

  8. TensorFlow:tf.train.Saver()模型保存与恢复

    1.保存 将训练好的模型参数保存起来,以便以后进行验证或测试.tf里面提供模型保存的是tf.train.Saver()模块. 模型保存,先要创建一个Saver对象:如 saver=tf.train.S ...

  9. (asp)JScript读写、复制、移动文件 asp也就那回事(4)

    百度博客http://hi.baidu.com/sdink/blog/ 和QQ空间同时更新http://516649425.qzone.qq.com <" CODEPAGE=" ...

  10. C# 异步锁【转】

    原文:http://www.yalongyang.com/2013/01/c-sharp-await-lock/ 在C#中,普通用锁很简单 object m_lock = new object(); ...