通过上一篇文章,我们知道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 web站点,喜欢用相对路径。 认为这样,无论目录放到那里。 只要跟另外目录关系一致。那么就不会出现问题。如果一个站点,一般都认为,如果用根目录,经常会改变网站地址,觉得很不方便。其实,我们从各大常见框架里面会发现,基本上都是采用是绝对路径方法。 相对路径带来问题 我们有如下结构的目录。 <web>(网站根目录)
├<a>文件夹
│ │
│ └a.php
├<b>文件夹
│ │
│ └b.php
└test.php
如果b.php 包含a.php (include(“../a/a.php”)) ,然后test.php 包含b.php (include(“b/b.php”)) ,我们发现很奇怪问题。
首先访问:b.php 可...
阅读全文
网站提供上存功能,是很多站点经常会有功能,商城,论坛还有常见一些网盘站点。常见互联网上面,我们也是经常听说,某某站点出现上存漏洞,某某开源项目有上存漏洞。 从互联网开始出现动态程序,上存漏洞像幽灵一样,频繁的出现在各种系统中。为什么,一个上存漏洞会这么频繁出现呢。而且,有些系统反复修补,多次还没有修补成功!其实主要问题,还是出现在上存原理上面。我们先看看,上存过程。 网站上存过程分析 <?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。可以说,它最准确,确定是,只会得到直...
阅读全文
从上一篇:wordpress 3.5 filter 消息标签的名称 ,我们知道了wordpress过滤器消息灵活性。接下来,我们分析下这个具体执行过程。这个也是wordpress 优秀代码一个核心点。学习并使用该方法,应用到自己的站点中,将会给自己的系统带来很大的灵活性提升,扩展性将大大增强。其实这 类设计模式,就是”监听者模式“,先让监听者监听某个事件,只要发生某个事情,就去执行任务。对一个事件,可以添加条监控,分别执行独立任务。 不过,消息过滤模式,它有一个特点,每个执行任务将会返回一个结果,这个结果将作为下一个任务输入参数。第一个任务输入参数,就是发送消息,并且传入的参数。 是不是感觉有点晕晕啦,呵呵,如果对监听者设计模式熟悉的话...
阅读全文
wordpress 框架有很多优点,从前一篇“《我的博客》之从技术眼中分析wordpress结构优缺点” ,可以看到,它的消息标签在解耦方面扩展性有多强。 我看了,wordpress官方手册,里面没有对所有标签进行罗列。而如果你要进行wordpress插件开发,功能扩展开发。它的消息标签,是必须要有所了解的。 以下是我收集的所有filters类的消息标签,居然有500多个。 'add_menu_classes' 'admin_body_class' 'admin_comment_types_dropdown' 'admin_footer_text' 'admin_memory_limit' 'admin_post_thumbnail_html' 'admin_title' 'admin_url' 'admired_attachment_size' 'admired_author_bio_avatar_size' '...
阅读全文
我还是觉得自己开辟搭建一个独立blog平台,我常用linux服务器,因此选择php环境。 这样,我可以选择的开源博客系统会有很多。这里不对博客系统进行纵向对比。我说下,对wordpress认识过程,一些自己的体会。纯属代表个人意见,欢迎讨论! 刚开始,下载一套wordpress 3.5,然后一路安装下来,比较简单,跟常见其它一些开源平台查不到。 只要配置好数据库连接,然后一路下一步,分把钟就可以做好。 也是由于,对wordpress 早已经有所耳闻,而且感觉它名气很大,这类系统中佼佼者。 首先看看它数据库结构吧 11张表,实现了强大的博客功能,首先表示不简单。现在很多cms 基本上都是40-50个表。其中很有几张表,设计...
阅读全文