如何对php程序中的常见漏洞进行攻击

2016-01-29 14:59 3 1 收藏

如何对php程序中的常见漏洞进行攻击,如何对php程序中的常见漏洞进行攻击

【 tulaoshi.com - PHP 】

 

来源:Chinaasp
之所以翻译这篇文章,是因为目前关于CGI安全性的文章都是拿Perl作为例子,而专门介绍ASP,PHP或者JSP安全性的文章则很少。Shaun Clowes的这篇文章比较全面地介绍了PHP的安全问题,原文可以在http://www.securereality.com.au/stu...arlet.txt找到。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/php/)

由于原文比较长,而且有相当一部分是介绍文章的背景或PHP的基础知识,没有涉及到PHP安全方面的内容,因此我没有翻译。如果你想了解这方面的知识,请参考原文。

文章主要从全局变量,远程文件,文件上载,库文件,Session文件,数据类型和容易出错的函数这几个方面分析了PHP的安全性,并且对如何增强PHP的安全性提出了一些有用的建议。

好了,废话少说,我们言归正传!

[全局变量]
PHP中的变量不需要事先声明,它们会在第一次使用时自动创建,它们的类型也不需要指定,它们会根据上下文环境自动确定。从程序员的角度来看,这无疑是一种极其方便的处理方法。很显然,这也是快速开发语言的一个很有用的特点。一旦一个变量被创建了,就可以在程序中的任何地方使用。这个特点导致的结果就是程序员很少初始化变量,毕竟,当它们第一次创建时,他们是空的。

很显然,基于PHP的应用程序的主函数一般都是接受用户的输入(主要是表单变量,上载文件和Cookie等),然后对输入数据进行处理,然后把结果返回到客户端浏览器。为了使PHP代码访问用户的输入尽可能容易,实际上PHP是把这些输入数据看作全局变量来处理的。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/php/)

例如:

<FORM METHOD="GET" ACTION="test.php"
<INPUT TYPE="TEXT" NAME="hello"
<INPUT TYPE="SUBMIT"
</FORM

很显然,这会显示一个文本框和提交按钮。当用户点击提交按钮时,“test.php”会处理用户的输入,当“test.php”运行时,“$hello”会包含用户在文本框输入的数据。从这里我们应该看出,攻击者可以按照自己的意愿创建任意的全局变量。如果攻击者不是通过表单输入来调用“test.php”,而是直接在浏览器地址栏输入http://server/test.php?hello=hi&set...敲矗恢故恰?/a$hello”被创建,“$setup”也被创建了。

译者注:这两种方法也就是我们通常说的“POST”和“GET”方法。
下面的用户认证代码暴露了PHP的全局变量所导致的安全问题:

<?php
if ($pass == "hello")
$auth = 1;
...
if ($auth == 1)
echo "some important information";
?

上面的代码首先检查用户的密码是否为“hello”,如果匹配的话,设置“$auth”为“1”,即通过认证。之后如果“$suth”为“1”的话,就会显示一些重要信息。

表面看起来是正确的,而且我们中有相当一部分人是这样做的,但是这段代码犯了想当然的错误,它假定“$auth”在没有设置值的时候是空的,却没有想到攻击者可以创建任何全局变量并赋值,通过类似“http://server/test.php?auth=1”的方...且丫现す摹?/a

因此,为了提高PHP程序的安全性,我们不能相信任何没有明确定义的变量。如果程序中的变量很多的话,这可是一项非常艰巨的任务。

一种常用的保护方式就是检查数组HTTP_GET[]或POST_VARS[]中的变量,这依赖于我们的提交方式(GET或POST)。当PHP配置为打开“track_vars”选项的话(这是缺省值),用户提交的变量就可以在全局变量和上面提到的数组中获得。

但是值得说明的是,PHP有四个不同的数组变量用来处理用户的输入。HTTP_GET_VARS数组用来处理GET方式提交的变量,HTTP_POST_VARS数组用于处理POST方式提交的变量,HTTP_COOKIE_VARS数组用于处理作为cookie头提交的变量,而对于HTTP_POST_FILES数组(比较新的PHP才提供),则完全是用户用来提交变量的一种可选方式。用户的一个请求可以很容易的把变量存在这四个数组中,因此一个安全的PHP程序应该检查这四个数组。

[远程文件]

来源:https://www.tulaoshi.com/n/20160129/1494942.html

延伸阅读
标签: PHP
  虚拟主机设置 <VirtualHost 127.0.10.10 ServerAdmin webmaster@hostmachine.com DocumentRoot /www/virtual.com/htdocs ServerName www.virtual.com UserDir /www/virtual.com/htdocs ScriptAlias /cgi-bin/ /www/virtual.com/cgi-bin/ ErrorLog /www/virtual.com/logs/error_log CustomLog /www/virtual.com/logs/access_...
阿里云邮箱如何对邮箱中的信件进行排序   阿里云邮箱默认是按照邮件的发送日期和时间排列的,最近收到的邮件会排在最上端。如当您点击收件箱时,看到的信件是按照日期排序,并且日期链接旁边会出现一个向下的箭头按钮,这表明信件是按邮件的发送日期和时间的降序排列的。 若您想要文件夹中的邮件按照发件人排序,您直接点击发件...
  对任我飞扬1.3,乔客6.0,dvbbs 3.0 sp2之前所有版本有效,其它论坛也可以使用,具体原理不再分析,以前的很多文章都有介绍。 软件下载地址: http://free.efile.com.cn/hnxyy/CommUpFile.exe 原代码: unit untmain; interface uses   Windows, Messages, SysUtils, Var...
标签: windows系统
Windows8中如何对硬盘进行碎片整理   1、右键点击任何一个的盘符,选择属性; 2、选择工具,点击优化; 3、点击需要整理的盘符---选择分析; 4、碎片整理完成。 Windows8系统下实现鼠标指向某文件夹时显示提示信息及内容   适用范围: Windows 8 消费者预览版 知识点分析: W...
标签: PHP
文件和目录的操作 PHP 处理本地服务器上的文件和目录是非常方便的,但有时候会出现权限和路径相关的问题 1.打开文件 resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] ) $handle = fopen(filename,mode)//打开文件,返回代表此文件的资源的句柄 文件名称可以使用相对路径或者绝...