[导入]php 安全基础 附录B. 函数

附录B. 函数

  在我写作本书的时候,http://php.net/quickref.php列出了共3917个函数,其中包括一些类似函数的语法结构,在此我不准备把它们从函数中区分开来,而是把它作为函数看待。

  由于函数数量很大,一一说明它们的正确及安全用法是不太可能的。在此我选出了我认为最需要注意的函数。选择的标准包括使用的频繁度、使用时的危险(安全)度及我本人的经验。

  对于每一个列出的函数,我都会提供推荐的使用方法。在提出这些方法时,我会把安全作为重点考虑。请在实际使用时根据你的需求进行相应调整。

  当一个函数与另一个有相同的风险时,我会给出参见另一个函数的信息,而不是多余地再次描述一遍。

 

B.1. eval( )

  eval( )函数用于对一个字符串以PHP语句方式解析运行。如:

  <?php

 

  $name = 'Chris';

 

  $string = 'echo "Hello, $name";';

  eval($string);

 

  ?>

 

  上例中会把$string作为PHP语句来运行,因此等价于:

 

  <?php

 

  $name = 'Chris';

 

  echo "Hello, $name";

 

  ?>

 

  虽然eval( )非常有用,但是当使用了被污染数据时会非常危险。例如,在下例中,如果$name是被污染的,攻击者可以任意运行PHP代码:

 

  <?php

 

  $name = $_GET['name'];

  eval($name);

 

  ?>

 

  当你无法确信以PHP方式解释的字符串是否使用被污染数据时,以及在可能的情况下,我推荐你避免使用eval( )。在安全审查和同行评审中,应重点检查该函数。

 

B.2. exec( )

  第6章中已提到,执行shell命令是非常危险的操作,在构造shell命令时使用被污染数据会导致命令注入漏洞。

  尽量避免使用shell命令函数,但当你需要用它们时,请确信构造shell命令时只使用过滤及转义过的数据。

 

  <?php

 

  $clean = array();

  $shell = array();

 

  /* Filter Input ($command, $argument) */

 

  $shell['command'] = escapeshellcmd($clean['command']);

  $shell['argument'] = escapeshellarg($clean['argument']);

 

  $last = exec("{$shell['command']} {$shell['argument']}", $output, $return);

 

  ?>

 

B.3. file( )

  file( )函数是我喜欢使用的读文件方法之一。它会读取文件的每一行作为返回数组的元素。特别方便的一点是,你不需要提供一个文件句柄——你提供文件名,它会为你做好一切:

 

  <?php

 

  $contents = file('/tmp/file.txt');

  print_r($contents);

 

  ?>

 

  如果上面的文件有两行,则会产生类似如下的输出:

 

  Array

  (

      [0] => This is line one.

      [1] => This is line two.

  )

 

  使用file( )函数不是特别危险,但当你在allow_url_fopen选项打开的情况下使用时,它就能读取许多不同类型的资源如一个远程网站的内容:

 

  <?php

 

  $contents = file('http://example.org/');

  print_r($contents);

 

  ?>

 

  输出如下 (有删节):

 

  Array

  (

      [0] => <html>

      [1] => <head>

      [2] => <title>Example Web Page</title>

      [3] => </head>

      [4] => <body>

      ...

      [11] => </body>

      [12] => </html>

  )

 

  如果file()函数调用的文件名是由被污染数据构造的,则其内容也应被看成是被污染的。这是因为使用被污染数据构造文件名可能会导致你打开一个有恶意数据的远程网站。一旦你把数据保存在一个变量中,危险就大幅增加了:

 

  <?php

  $tainted = file($_POST['filename']);

  ?>

 

  $tainted数组中的每个元素与$_POST['filename']有相同的危险性——它是输入并必须要进行过滤。

  在这里,其行为有可能是意想不到的——$_POST['filename']的误用可以改变file()函数的行为,因此它可以指向一个远程资源而不是本地文件。

 

B.4. file_get_contents( )

  参见 "file( )."

 

B.5. fopen( )

  参见 "file( )."

 

B.6. include

  如第5章所述,include在组织化与模块化的软件设计中被普遍使用,是非常有必要的。但是,不正确的使用include会造成一个重大的代码注入安全漏洞。

  在include语句中只使用已过滤数据是非常有必要的。在安全审查和同行评审中,应重点检查该函数。

 

B.7. passthru( )

  见"exec( )."

 

B.8. phpinfo( )

  phpinfo( )会输出有关PHP信息的页面——运行的版本号,配置信息等等。由于phpinfo( )的输出提供了非常多的信息,我建议限制对任何使用该函数的资源的访问。

  如果你使用的第八章中的技巧来保护数据库验证信息,则需要确认访问者不能看到由phpinfo( )形成的输出信息,这是由于它会暴露超级全局数组$_SERVER的内容。

 

B.9. popen( )

  参见"exec( )."

 

B.10. preg_replace( )

  preg_replace( )用于对符合正则表达式的字符串进行替换。在某些情况下,使用被污染数据构造正则表达式部分会非常危险,因为它的e修饰符会导致在替换时把用于替换的参数作为PHP代码来对待。例如(本例为译者所加):

 

<?php

$str = "abcdef";

$se = "len";

$reg = "/abc/e";

echo preg_replace($reg,"strlen(\$se)",$str);

?>

 

会输出如下字串:

3def

 

  当使用了e修饰符,不管是否有意为之,它会带来与eval()相同的风险。在安全审查和同行评审中,应重点检查该函数。

 

B.11. proc_open( )

  参见 "exec( )."

 

B.12. readfile( )

  参见 "file( )."

 

B.13. require

  参见 "include."

 

B.14. shell_exec( )

  参见 "exec( )."

 

B.15. system( )

  参见 "exec( )."

 

1133996.html?type=1

[新闻]NHibernate 2.0.0.Beta1发布了
文章来源:http://www.cnblogs.com/czh-liyu/archive/2008/04/02/1133996.html

转载于:https://www.cnblogs.com/xfliu/archive/2008/07/01/1233386.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6段Python代码刻画深度学习历史:从最小二乘法到深度神经网络

最小二乘法深度学习的一切都起源于这个数学片段&#xff08;我把它用Python 写了出来&#xff09;&#xff1a;这一方法是 1805 年巴黎数学家阿德利昂玛利埃勒让德首次提出的&#xff08;1805&#xff0c;Legendre&#xff09;&#xff0c;勒让德建立了许多重要的定理&#xff…

win7美化_Potplayer64位美化版,无棒子的tv推送

potplayer 64位是一款视频播放器&#xff0c;potplayer 64位目前正在新功能全力开发中&#xff0c;由于采用delphi编译程序kmplayer的一些弊端&#xff0c;姜龙喜先生为改进播放器本身的一些性能而重新用vc进行构架&#xff0c;有需要的伙伴们可以移步简易下载站获取&#xff0…

如何在 C# 8 中使用 Channels

在面对 生产者-消费者 的场景下&#xff0c; netcore 提供了一个新的命名空间 System.Threading.Channels 来帮助我们更高效的处理此类问题&#xff0c;有了这个 Channels 存在, 生产者 和 消费者 可以各自处理自己的任务而不相互干扰&#xff0c;有利于两方的并发处理&#x…

mockito mock void方法_使用 Junit + Mockito 实践单元测试!

一、前言相信做过开发的同学&#xff0c;都多多少少写过下面的代码&#xff0c;很长一段时间我一直以为这就是单元测试...SpringBootTestRunWith(SpringRunner.class)public class UnitTest1 {Autowiredprivate UnitService unitService;Testpublic void test() {System.out.pr…

人为什么会出轨?麻省理工学院告诉你:男女配对的真相

该实验出自麻省理工学院著名经济学家Dan Ariely的《The Upside of Irrationality》。结果很有趣&#xff0c;在我们的生活中也尤为常见。实验人员找来100位正值青春年华的大学生&#xff0c;男女各半。然后制作了100张卡片&#xff0c;卡片上写了从1到100总共一百个数字。单数的…

当 .NET 5 遇上OpenTelemetry,会碰撞出怎样的火花?

OpenTelemetry 介绍我在之前的几篇文章都介绍了 OpenTelemetry, 你可以在这里找到OpenTelemetry - 云原生下可观测性的新标准深入研究.NET 5的开放式遥测OpenTelemetry是谷歌和微软共同推进的云原生监控的新规范&#xff0c; 兼容OpenTracing和OpenCensusOpenTelemetry的终极目…

kotlin中mainactivity无法直接调用xml中的控件_使用52North 客户端接口调用OGC WPS服务...

52North是一个来自研究机构、工业界和公共行政管理界的研究者组成的开放国际合作组织&#xff0c;他们通过协作研发流程促进地理信息学创新。具体来说他们开发新的地理信息概念和技术&#xff0c;例如用于管理时空测量数据&#xff0c;以及通过网络共享地理处理技术。他们评估新…

明天放假,我放价!一个国庆假期教你学会数学建模

原价298元&#xff0c;国庆放价&#xff01;248元即可报名学习&#xff01;数学建模涉及的内容比较广泛&#xff0c;比如碎纸片问题中所涉及的图像识别及神经网络、小区开放问题中所涉及的车流模拟仿真、还有“互联网”时代的出租车资源配置中所涉及的运筹调度。或许数学建模的…

微软开源可扩展存储引擎Extensible Storage Engine

喜欢就关注我们吧&#xff01;昨日&#xff0c;微软副总裁 Scott Van Vliet 在推特上表示&#xff0c;可扩展存储引擎 Extensible Storage Engine&#xff08;ESE&#xff09;现已开源。可扩展存储引擎 Extensible Storage Engine&#xff08;ESE&#xff0c;也称 JET Blue&…

.NET应用程序中异步调用Web Service的几种方法 come from: veryhappy(wx.net)

测试程序界面 图一&#xff0c;调用前界面 图二&#xff0c;调用后界面 详细代码实现 闲言少叙&#xff0c;直接进入主题吧。首先一个声明一个类&#xff08;将来在客户端与服务器间传递&#xff09;&#xff1a; public classClass1 { private int _ID; priv…

完美国际真数苹果_如果给你推荐一款很贵,但好用的苹果手机壳,你会买吗?...

【引言】说到全球最热门的手机&#xff0c;大家都知道一定是iPhone啦&#xff0c;作为系统和功能整合得最优秀的手机&#xff0c;不足的地方也非常明显&#xff0c;比如外壳不耐剐蹭&#xff0c;维修成本很高......&#xff0c;所以大多数果粉都会选择保护壳或者贴膜来保护自己…

使用缓存防击穿,解决微信”被动回复用户消息”重试回复问题

背景做微信公众号开发的时候&#xff0c;其中有个接收普通消息、接收事件推送 API。有这么条规则&#xff0c; ”微信服务器在五秒内收不到响应会断掉连接&#xff0c;并且重新发起请求&#xff0c;总共重试三次。假如服务器无法保证在五秒内处理并回复&#xff0c;可以直接回…

美国硅谷预测10年后的世界,再不懂你就落伍了

预测毕竟是预测&#xff0c;不一定会全部都会实现&#xff0c;但其中相当多的一部分将会成为我们生活中的现实。生活在信息社会的每一个人&#xff0c;都应该对这些发展趋势有所了解&#xff0c;特此推荐给我们的读者朋友。现在因为人工智能(AI)的发展&#xff0c;配合更高速度…

谷歌浏览器安卓_安卓免费时代结束,国产手机或将集体涨价?

天下没有免费的午餐&#xff0c;免费多年的谷歌安卓系统或许即将成为历史。昨天上午&#xff0c;有网友发现&#xff0c;安卓官方推特账号发布推文&#xff0c;宣称公司计划在今年第三季度向中国手机厂商收取费用&#xff0c;包括华为、中兴、小米等。尽管这条消息又被秒删&…

参赛方案-主机托管、中小企业虚拟化应用

方案1&#xff1a;单服务器主机托管解决方案<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1.1 用户需求 在Internet普及的今天&#xff0c;每个单位都加大了在信息化方面前进的步伐&#xff0c;其中一个最基本的表现就是在电信…

腾讯急招.NET,但你准备好了吗?

新年至&#xff0c;腾讯开招.NET&#xff01;你准备好了吗&#xff1f;展望2021&#xff0c;可以预见.NET5、微服务、云原生将是大热话题&#xff0c;高并发必备的Redis、MongoDB、ElasticSearch依旧热门。新的一年&#xff0c;大厂对.NETer需求越来越大&#xff0c;大家要如何…

国庆中秋活动——让孩子亲近数学并爱上数学:《数学小侦探》来袭(来自科大出版社的福利)

通知&#xff01;通知&#xff01;通知&#xff01;&#xff01;&#xff01;玩酷屋十一黄金优惠限时限量秒杀活动&#xff0c;能抢到算你厉害&#xff1a;1、活动期间 2017/09/30 22:30 ——2017/10/03 22:302、【数学小侦探】原价 82元&#xff0c;秒杀活动价 76元3、节假日…

hadoop可以解决什么问题_聊一聊,临时工外包可以为企业解决什么问题

企业存在用人难的问题已经不是一天两天了&#xff0c;有些企业为了解决用人难的问题会选择临时工外包服务&#xff0c;相信大家都是知道这样的方式&#xff0c;可以有效的节省企业的人力物力&#xff0c;但大家都比较关心的是临时工外包可以为企业解决什么问题&#xff1f;现在…

图文并茂——使用xfire编写webservice,并通过C#调用

.首先建立一个web service工程&#xff1a;点击finish之后&#xff0c;myeclipse自动帮你生成services.xml以及web应用目录结构&#xff0c;其中的services.xml是你导出服务的配置文件&#xff0c;注意在WEB-INF/web.xml文件中配置了xfire自己的servlet. <servlet><se…

如何在 ASP.Net Core 中使用 Serilog

记录日志的一个作用就是方便对应用程序进行跟踪和排错调查&#xff0c;在实际应用上都是引入 日志框架&#xff0c;但如果你的 日志文件 包含非结构化的数据&#xff0c;那么查询起来将是一个噩梦&#xff0c;所以需要在记录日志的时候采用结构化方式。将日志结构化可以更容易的…