看我上两篇,我们知道,上存漏洞常见有,文件名检测漏洞,还有就是文件格式检查漏洞。 另外还有个一个,就是保存文件存在漏洞。这类漏洞,主要是可以读取用户传入路径名称,采用不正确的过滤方法,导致恶意用户,将文件上存到非预期的地方,带来安全隐患。其实,我们抓住几个地方即可,我们先来分析下,既然用户要上存文件,而且文件将是多种多样格式;可能有的文件内容与用户传入格式不一致,有的文件内容还夹杂木马代码。 那么,我们让用户上存文件,跟站点文件做一个分别授权,做隔离。 让保存上存目录独立开来,目录权限只读不能执行这一步从系统设计加以授权,无论你上次什么文件,都不可能执行到。就算我不做任何检测,你的文件都上存到这...
阅读全文
通过上一篇文章,我们知道wed上存漏洞,最常见一种是文件名检测漏洞,接下来,我们看看另外一种漏洞,上存文件类型漏洞,这也是一种较为容易出现问题。 我当时就想,既然我知道我需要允许上存什么样的文件,那么,我就只允许你上存该文件。只要我文件类型判断准确了,你想上存能够执行的代码。我都给阻止掉,不就行了吗? 这确实,是个好的方法,但是我们再做的时候,往往会出现下面一些问题。 这里我们看下常见实现的php代码。 这里,常见两个问题是: 1.读取文件type,直接做文件类型判断 2.通过工具分析文件格式,以此来确认文件类型 问题一:读取文件type,判断文件类型
if(isset($_FILES['img'...
阅读全文
我们通过前篇:web上存漏洞及原理分析、防范方法 学习,已经知道后端获取服务器变量,很多来自客户端传入的。跟普通的get,post没有什么不同。下面我们看看,常见出现漏洞代码。 1、检测文件类型,并且用用户上存文件名保存 if(isset($_FILES['img']))
{
$file = save_file($_FILES['img']);
if($file===false) exit('上存失败!');
echo "上存成功!",$file;
}
function check_file($img)
{
///读取文件
if($img['error']>0) return false;
$tmpfile = $img['tmp_name'];
$filename = $img['name'];
///读取文件扩展名
$len=strrpos($filename,".");
if($len===false) return false;
//得...
阅读全文
网站提供上存功能,是很多站点经常会有功能,商城,论坛还有常见一些网盘站点。常见互联网上面,我们也是经常听说,某某站点出现上存漏洞,某某开源项目有上存漏洞。 从互联网开始出现动态程序,上存漏洞像幽灵一样,频繁的出现在各种系统中。为什么,一个上存漏洞会这么频繁出现呢。而且,有些系统反复修补,多次还没有修补成功!其实主要问题,还是出现在上存原理上面。我们先看看,上存过程。 网站上存过程分析 <?php
header("Content-type: text/html; charset=utf-8");
if($_FILES)
{
echo '<pre>';
var_dump($_FILES);
echo '</pre>';
}
?>
<form action="" en...
阅读全文
通过上一篇,获取用户Ip地址通用方法常见安全隐患(HTTP_X_FORWARDED_FOR) ,我们已经意 识到直接从http_x_forwarded_for中读取用户IP,跟我们直接从一个get,post值中读取其实没有两样。web参数检测里面一个基本原则:“一切输入都是有害的”,因此,只要是输入我们就需要进行过滤。 安全过滤后的getIP函数 function getIP() { $realip = ''; //设置默认值 if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $realip = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) { $realip = $_SERVER['HTTP_CLIENT_IP']; } else { $realip = $_SERVER['REMOTE_ADDR']; } preg_match('/^((?:\d{1,3}\.){3}\d{1,3})/',$rea...
阅读全文
分析过程这个来自一些项目中,获取用户Ip,进行用户操作行为的记录,是常见并且经常使用的。 一般朋友,都会看到如下通用获取IP地址方法。function getIP() { if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $realip = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) { $realip = $_SERVER['HTTP_CLIENT_IP']; } else { $realip = $_SERVER['REMOTE_ADDR']; } return $realip; }这个是网上常见获取,ip函数,用这些值获取IP,我们首先要弄清楚,这些数据是从那个地方传过来的。 IP获取来源1.'REMOTE_ADDR' 是远端IP,默认来自tcp 连接是,客户端的Ip。可以说,它最准确,确定是,只会得到直...
阅读全文