heiyeluren的blog(黑夜路人的开源世界)

关注LAMP,Web开发,OpenSource,系统架构

谢华亮ID:heiyeshuwu
825446次访问,排名36好友26人,关注者56
既然决定远行,便只顾风雨兼程。
heiyeshuwu的文章
原创 277 篇
翻译 3 篇
转载 199 篇
评论 497 篇
heiyeluren的公告

联系方式:


访问统计: free hit counter code
FeedSky订阅:
FeedSky订阅
最近评论
heiyeshuwu:回复楼上:
没有办法,呵呵,hash表嘛,自然是点到点的。理论上来说,是可以支持 next 和 pre 操作的,但是按照某个前缀来检索估计悬,那就是比较强大的数据库了,呵呵。
Peng:现在有个问题:
当缓存了大量的数据时,我想更新其中的一部分.不是每个键名都知道,所以不能一个个去删除,.但要更新的KEY都有共同的前缀,不知有什么好的思路没有?
要是能得到所有缓存的KEY名列表就好了,这样就可根据KEY名来更删除想要更新的那部分缓存
happyfish100:是的,tracker和storage这两个角色可以部署到一台服务器上。
yuzhu:tracker storage 应该可以部署到一台服务器吧。
wildlily980:谢谢分享。
文章分类
收藏
    相册
    技术图片
    搜索引擎
    ::eYou::
    kevin world
    lewis - 老吕
    qyb - BT的花
    Realzay的blog
    叶金荣
    天堂地狱鬼-dulao5's Blog
    沙漠之周
    狐狸糊涂
    老韩
    與子觀化
    ::Yahoo::
    glemir’s blog
    happy_fish - 分布式文件系统FastDFS
    Rainx
    stauren
    互联网,请记住我 - 162同学的技术博客
    小蚂蚁同学滴测试博客
    张彪同学
    随网之舞 - kaven的DHTML博客
    ::朋友::
    【推荐】中文分类网
    DDR的博客
    kevin world
    miky
    俺兄弟的blog
    冰河的技术博客:心随风动
    小少的技术博客
    无尘居
    晋陵路人的Blog
    李天华同学滴技术博客
    沙狐部落
    ::网友::
    Code & Stock.
    LionD8的Blog
    Phzzy
    张贺同学的博客
    技术大牛老余的博客
    抚琴居
    程序人生
    邢红瑞的blog
    阿健的博客
    :PHP博客:
    .: Easy style :.
    [琴剑楼]
    CoolCode.cn
    Haohappy的Blog
    Hightman
    iwind的blog
    Javascript开发站
    JD Space
    Nio's Weblog
    Open Source PHP
    PHP面对对象
    SourceForge.net
    trip的专栏
    UGIA.cn
    windix's blog
    Windix's Weblog
    一个藏袍
    俊麟 Michael`s blog
    偶然的blog
    刘敏的blog
    大龄青年的Blog
    廖宇雷的blog
    懒猫开始新生活blog
    某人的栖息地
    王春生的博客
    神仙
    :牛人blog:
    DBA notes
    http://blog.csdn.net/tingya/
    侯捷网站
    孟岩
    搜索引擎研究
    方舟
    王咏刚的BLOG
    竹笋炒肉
    荣耀
    车东[Blog^2]
    透明思考
    陈硕的Blog
    DHTML
    DHTMLGoodies
    FCKEditor
    Google Code
    Google Web Toolkit
    HTML Goodies
    HTML.it
    HTMLAre
    HTMLdog
    JavaScript Kit
    jQuery
    KindEditor
    Prototype
    TinyMCE
    W3 Schools
    Yahoo JavaScript Developer Center
    Yahoo! Developer Network
    Yahoo! UI Library (YUI)
    网页设计师Web标准
    Java国内站
    ChinaJavaWorld.com技术论坛
    IBM developerWorks 中国: Java
    Java中文站
    Java开源大全
    Java爱好者
    JR - Java翻译站
    J道-JDON
    Matrix: 与Java共舞
    中国Java开发网
    中文java技术网
    PHP国内站点
    CSDN PHP论坛
    Discuz!
    FleaPHP
    Google--PHP用户组
    IBM DeveloperWorks
    JavsScript技术讨论
    Nirvana Studio
    OpenPHP.cn
    PHPChina
    TiM Club
    中文 PFC 1.0 手册--PHP5的开发包
    中文 PFC 1.0 手册--PHP5的开发包
    中文PHP网
    太平洋--PHP开发区
    爱MySQL
    超越PHP
    PHP国外站点
    ADOdb
    Agavi Framework
    Cake PHP
    MySQL Performance Blog
    MySQL Performance Blog
    Nonaweb
    PEAR
    PECL
    PECL Windows
    PHP Builder
    PHP Classes
    PHP Classes
    PHP New Download
    PHP Security Consortium
    php.MVC
    php.MVC
    PHPkitchen(OO & MVC)
    phpPatterns
    PHP国外图书下载
    smart template
    Smarty
    SourceForge.net
    Symfony Framework
    Zend
    Zend Framework
    Unix C/C++
    Free Gentux
    周立发的blog(Linux C)
    Unix/Linux
    BSD智库
    ChinaUnix
    FreeBSDChina
    FreeLAMP
    IBM开发者Linux专区
    Linux Byte
    LinuxKit
    LinuxTS
    Linux伊甸园
    Linux技术中坚站
    Linux非常空间
    Love Unix
    NetBSD&OpenBSD中文用户组
    NetBSD中国社区
    Oracle中国用户讨论组
    OurLinux
    Unix中文
    Unix中文
    Unix中文宝库
    中国Linux公社
    中国Unix用户技术论坛
    中文FreeBSD用户组
    永远的Unix
    炎黄角马
    程序设计
    CSDN
    IBM开发者中心
    Microsoft TechNet: 主页
    MSDN 中文网站
    PHP中文站
    Sun技术社区
    中国IT认证实验室--企业应用技术
    中国协议分析网
    喜悦国际村
    太平洋电脑网---开发特区
    实用网站
    veBook(国外大量免费图书下载网站)
    Whois.net
    中国Web信息博物馆
    中国互联网络信息中心whois查询
    服务器系统信息查看
    网络安全
    AnySide.com
    CGI Secutiry
    K-OTik Security Monitoring
    Linux Security
    Packet Storm Security
    PHP Secure
    RFC中文文档索引
    Safemode.org
    SecuriTeam.com
    Security Corporation
    SecurityFocus
    SecurityTracker
    Zone-h (区域黑客,每天公布各国被黑的网站)
    中华安全网
    中国信息安全组织
    国家计算机网络应急处理中心
    安全天使
    安全焦点
    幻影旅团
    绿盟科技
    网络安全评估中心(cnns )
    在线手册
    Apache2.0中文文档
    Beyond Linux From Scratch
    Debian参考手册
    FreeBSD Porter 手册
    FreeBSD使用手册
    Linux C函数中文参考手册
    MySQL 4.1.0 中文参考手册
    NetBSD在线手册
    OpenBSD在线FAQ
    PHP ADODB 1.99版手册中文翻译(Tripc)
    PHP中文手册(国内)
    PHP中文手册(国外)
    PostgreSQL中文文档
    Red Hat Linux 9入门指南
    Red Hat Linux 9安装指南
    Red Hat Linux 9定制手册
    中国OSS技术手册中心
    技术文档手册中心-ChinaUnix
    存档
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 PHP中的代码安全和SQL Injection防范收藏

    新一篇: PHP ADODB1.99版手册 (修正版) | 旧一篇: PHP中多张图片上传并校验的实现

    PHP中的代码安全和SQL Injection防范

    注意: 本文已经发表在2005年4月的<黑客防线>杂志上, 请勿转载。

    /*************************
     * 作者:heiyeluren
     * QQ:37035600
     * Email:heiyeluren@163.com
     *************************/

    在现在各种黑客横行的时候,如何实现自己php代码安全,保证程序和服务器的安全是一个很重要的问题,我随便看了下关于php安全的资料,并不是很多,至少比asp少多了,呵呵,于是就想写点东西,来防止这些可能出现的情况。这里没有太深的技术含量,我只是比较简单的谈了谈。(以下操作如无具体说明,都是基于PHP+MySQL+Apache的情况)

    先来说说安全问题,我们首先看一下两篇文章:
    http://www.xfocus.net/articles/200107/227.html    
    http://www.xfocus.net/articles/200107/228.html

    上面文章是安全焦点上的关于PHP安全的文章,基本上比较全面的介绍了关于PHP的一些安全问题。

    在PHP编码的时候,如果考虑到一些比较基本的安全问题,首先一点:
    1. 初始化你的变量

    为什么这么说呢?我们看下面的代码:
    if ($admin)
    {
        echo '登陆成功!';
        include('admin.php');
    }
    else
    {
        echo '你不是管理员,无法进行管理!';
    }

    好,我们看上面的代码好像是能正常运行,没有问题,那么加入我提交一个非法的参数过去呢,那么效果会如何呢?比如我们的这个页是 http://www.traget.com/login.php,那么我们提交:http://www.target.com/login.php?admin=1,呵呵,你想一些,我们是不是直接就是管理员了,直接进行管理。
    当然,可能我们不会犯这么简单错的错误,那么一些很隐秘的错误也可能导致这个问题,比如最近暴出来的phpwind 1.3.6论坛有个漏洞,导致能够直接拿到管理员权限,就是因为有个$skin变量没有初始化,导致了后面一系列问题。

    那么我们如何避免上面的问题呢?首先,从php.ini入手,把php.ini里面的register_global = off,就是不是所有的注册变量为全局,那么就能避免了。但是,我们不是服务器管理员,只能从代码上改进了,那么我们如何改进上面的代码呢?我们改写如下:
    $admin = 0;      // 初始化变量
    if ($_POST['admin_user'] && $_POST['admin_pass'])
    {
        // 判断提交的管理员用户名和密码是不是对的相应的处理代码
        // ...
        $admin = 1;
    }
    else
    {
        $admin = 0;
    }

    if ($admin)
    {
        echo '登陆成功!';
        include('admin.php');
    }
    else
    {
        echo '你不是管理员,无法进行管理!';
    }

    那么这时候你再提交 http://www.target.com/login.php?admin=1 就不好使了,因为我们在一开始就把变量初始化为 $admin = 0 了,那么你就无法通过这个漏洞获取管理员权限。


    2. 防止SQL Injection (sql注射)

    SQL 注射应该是目前程序危害最大的了,包括最早从asp到php,基本上都是国内这两年流行的技术,基本原理就是通过对提交变量的不过滤形成注入点然后使恶意用户能够提交一些sql查询语句,导致重要数据被窃取、数据丢失或者损坏,或者被入侵到后台管理。
    基本原理我就不说了,我们看看下面两篇文章就很明白了:
    http://www.4ngel.net/article/36.htm
    http://www.4ngel.net/article/30.htm

    那么我们既然了解了基本的注射入侵的方式,那么我们如何去防范呢?这个就应该我们从代码去入手了。

    我们知道Web上提交数据有两种方式,一种是get、一种是post,那么很多常见的sql注射就是从get方式入手的,而且注射的语句里面一定是包含一些sql语句的,因为没有sql语句,那么如何进行,sql语句有四大句:
    select 、update、delete、insert,那么我们如果在我们提交的数据中进行过滤是不是能够避免这些问题呢?
    于是我们使用正则就构建如下函数:

    /*
    函数名称:inject_check()
    函数作用:检测提交的值是不是含有SQL注射的字符,防止注射,保护服务器安全
    参        数:$sql_str: 提交的变量
    返 回 值:返回检测结果,ture or false
    函数作者:heiyeluren
    */
    function inject_check($sql_str)
    {
         return eregi('select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str);    // 进行过滤
     }

    我们函数里把 select,insert,update,delete, union, into, load_file, outfile /*, ./ , ../ , ' 等等危险的参数字符串全部过滤掉,那么就能够控制提交的参数了,程序可以这么构建:

    <?php
    if (inject_check($_GET['id']))
    {
         exit('你提交的数据非法,请检查后重新提交!');
    }
    else
    {
        $id = $_GET['id'];
        echo '提交的数据合法,请继续!';
    }
    ?>
    假设我们提交URL为:http://www.target.com/a.php?id=1,那么就会提示:
    "提交的数据合法,请继续!"
    如果我们提交 http://www.target.com/a.php?id=1' select * from tb_name
    就会出现提示:"你提交的数据非法,请检查后重新提交!"

    那么就达到了我们的要求。

    但是,问题还没有解决,假如我们提交的是 http://www.target.com/a.php?id=1asdfasdfasdf 呢,我们这个是符合上面的规则的,但是呢,它是不符合要求的,于是我们为了可能其他的情况,我们再构建一个函数来进行检查:

    /*
    函数名称:verify_id()
    函数作用:校验提交的ID类值是否合法
    参        数:$id: 提交的ID值
    返 回 值:返回处理后的ID
    函数作者:heiyeluren
    */
    function verify_id($id=null)
    {
       if (!$id) { exit('没有提交参数!'); }    // 是否为空判断
       elseif (inject_check($id)) { exit('提交的参数非法!'); }    // 注射判断
       elseif (!is_numeric($id)) { exit('提交的参数非法!'); }    // 数字判断
       $id = intval($id);    // 整型化
     
       return  $id;
    }

    呵呵,那么我们就能够进行校验了,于是我们上面的程序代码就变成了下面的:

    <?php
    if (inject_check($_GET['id']))
    {
         exit('你提交的数据非法,请检查后重新提交!');
    }
    else
    {
        $id = verify_id($_GET['id']);    // 这里引用了我们的过滤函数,对$id进行过滤
        echo '提交的数据合法,请继续!';
    }
    ?>

    好,问题到这里似乎都解决了,但是我们有没有考虑过post提交的数据,大批量的数据呢?
    比如一些字符可能会对数据库造成危害,比如 ' _ ', ' % ',这些字符都有特殊意义,那么我们如果进行控制呢?还有一点,就是当我们的php.ini里面的magic_quotes_gpc = off 的时候,那么提交的不符合数据库规则的数据都是不会自动在前面加' \ '的,那么我们要控制这些问题,于是构建如下函数:

    /*
    函数名称:str_check()
    函数作用:对提交的字符串进行过滤
    参    数:$var: 要处理的字符串
    返 回 值:返回过滤后的字符串
    函数作者:heiyeluren
    */
    function str_check( $str )
    {
       if (!get_magic_quotes_gpc())    // 判断magic_quotes_gpc是否打开
       {
          $str = addslashes($str);    // 进行过滤
     }
         $str = str_replace("_", "\_", $str);    // 把 '_'过滤掉
         $str = str_replace("%", "\%", $str);    // 把' % '过滤掉
      
       return $str;
    }

    OK,我们又一次的避免了服务器被沦陷的危险。

    最后,再考虑提交一些大批量数据的情况,比如发贴,或者写文章、新闻,我们需要一些函数来帮我们过滤和进行转换,再上面函数的基础上,我们构建如下函数:

    /*
    函数名称:post_check()
    函数作用:对提交的编辑内容进行处理
    参    数:$post: 要提交的内容
    返 回 值:$post: 返回过滤后的内容
    函数作者:heiyeluren
    */
    function post_check($post)
    {
       if (!get_magic_quotes_gpc())    // 判断magic_quotes_gpc是否为打开
       {
          $post = addslashes($post);    // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤
       }
       $post = str_replace("_", "\_", $post);    // 把 '_'过滤掉
       $post = str_replace("%", "\%", $post);    // 把' % '过滤掉
       $post = nl2br($post);    // 回车转换
       $post= htmlspecialchars($post);    // html标记转换
     
       return $post;
    }

    呵呵,基本到这里,我们把一些情况都说了一遍,其实我觉得自己讲的东西还很少,至少我才只讲了两方面,再整个安全中是很少的内容了,考虑下一次讲更多,包括php安全配置,apache安全等等,让我们的安全正的是一个整体,作到最安全。

    最后在告诉你上面表达的:1. 初始化你的变量  2. 一定记得要过滤你的变量

    Bye~~~

    Author: heiyeluren (heiyeluren@163.com)
    WriteTime: 2005-01-26 中午 12:40

    发表于 @ 2005年06月14日 16:26:00|评论(loading...)|编辑

    新一篇: PHP ADODB1.99版手册 (修正版) | 旧一篇: PHP中多张图片上传并校验的实现

    评论

    #kkkk 发表于2005-07-28 09:18:00  IP: 61.186.252.*
    太经典了,收藏了~~~
    #RUi 发表于2005-11-01 20:26:00  IP: 210.21.33.*
    naive
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © heiyeluren