仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 797|回复: 18
打印 上一主题 下一主题

[学习教程] PHP编程:PHP平安《PHP Security》

[复制链接]
飘灵儿 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:22:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
学习数据库了,MYSQL可算是PHP的黄金搭档了,不过,虽然话是这么说,你也可能恨不得把MYSQL给生吞活剥了,因为这一行一列的东东简直让自己头晕目眩。平安   [  原手札息 ]
《SAMS Teach Yourself PHP in 10 Minutes》
Author: Chris Newman   
Publisher : Sams Publishing
Pub Date : March 29, 2005
ISBN : 0-672-32762-7
Pages : 264
[  翻译信息 ]
翻译人员:heiyeluren
翻译工夫:2006-3-15
翻译章节:《Lesson 24. PHP Security》
中文称号:PHP平安

PHP勿庸置疑长短常壮大的办事器端剧本言语,然而壮大的功效老是陪伴侧重大的风险,在这章里,你将进修到利用PHP的平安形式来禁止一些PHP潜伏的风险要素。
【 平安形式 】
PHP的平安形式供应一个根基平安的同享情况,在一个有多个用户帐户存在的PHP开放的Web办事器上。当一个Web办事器上运转的PHP翻开了平安形式,那末一些函数将被完整的制止,而且会限制一些可用的功效。
[  利用平安形式来强迫限制 ]
在平安形式下,一些测验考试会见文件体系的函数功效将被限制。运转Web办事器用户ID,假如想要操作某个文件,则必需具有该文件读取或写入的会见权限,完成这个限制功效关于PHP来讲是没有成绩的。
在平安形式开启的时分,测验考试读取或写入一个当地文件的时分,PHP将反省以后会见用户是不是是该方针文件的一切者。假如不是一切者,则该操作会被制止。(写入权限:在较初级其余文件会见权限下,能够会答应读取或写入体系操作体系的文件,经由过程PHP的平安形式完成了避免你操作别的一个用户文件的操作。固然,一个Web办事器能够可以会见一个具有全局写入权限的恣意文件。)
当平安形式翻开的时分,以下函数列表的功效将会遭到限制:
chdir , move_uploaded_file,  chgrp,  parse_ini_file,  chown,  rmdir,  copy,  rename,  fopen,  require,  highlight_file,  show_source,  include,  symlink,  link,  touch,  mkdir,  unlink

一样的,一些PHP扩大中的函数也将会遭到影响。(加载模块:在平安形式下dl函数将被制止,假如要加载扩大的话,只能修正php.ini中的扩大选项,在PHP启动的时分加载)
在PHP平安形式翻开的时分,需求履行操作体系法式的时分,必需是在safe_mode_exec_dir选项指定目次的法式,不然履行将掉败。即便答应履行,那末也会主动的传递给escapeshellcmd函数停止过滤。
以下履行号令的函数列表将会遭到影响:
exec, shell_exec, passthru, system, popen
别的,背部标志操作符(`)也将被封闭。
当运转在平安形式下,固然不会引发毛病,然而 putenv 函数将有效。一样的,其他一些测验考试改动PHP情况变量的函数set_time_limit, set_include_path 也将被疏忽。
[  翻开平安形式 ]
翻开或封闭PHP的平安形式是使用php.ini中的safe_mode选项。假如要激活平安形式给以后一切同享Web办事器的用户,只需设置设置装备摆设选项为:
safe_mode = On
当函数在会见文件体系的时分将停止文件一切者的反省。缺省情形下,会反省该文件一切者的用户ID,当你可以修正文件一切者的组ID(GID)为 safe_mode_gid 选项所指定的。
假如你有一个同享库文件在你的体系上,当你碰着需求include或require的时分,那末你可使用 safe_mode_include_dir 选项来设置你的途径,包管你的代码正常任务。(包括途径: 假如你想要利用 safe_mode_include_dir 选项包括更多的包括途径,那末你可以象 include_path 选项一样,在Unix/Linux体系下利用冒号停止朋分,在Windows下利用分号停止朋分)
好比你想要在平安形式下包括 /usr/local/include/php 下的文件,那末你可以设置选项为:
safe_mode_include_dir = /usr/local/include/php
假如你的包括的文件是需求履行的,那末你可以设置 safe_mode_exec_dir 选项。好比你需求 /usr/local/php-bin 途径下的文件是可以履行的,那末可以设置选项为:
safe_mode_exec_dir = /usr/local/php-bin
(可履行:假如你履行的法式在 /usr/bin 目次下,那末你可以把这些的二进制文件,毗连到你指定选项下可以履行的途径)
假如你想设置某些情况变量,那末可使用 safe_mode_allowed_env_vars 选项。这个选项的值是一个情况变量的前缀,缺省是答应 PHP_ 开首的情况变量,假如你想要改动,可以设置该选项的值,多个情况变量前缀之间利用逗号停止朋分。
好比上面答应时区的情况变量 TZ ,那末修正该选项的值为:
safe_mode_allowed_env_vars = PHP_,TZ
【 其他的平安特点 】

除平安形式之外,PHP还供应了很多其他很多特点来包管PHP的平安。

[  埋没PHP ]
你可以在php.ini里利用 expose_php 选项来避免Web办事器泄漏PHP的呈报信息。以下:
expose_php = On
使用全部设置,你可以障碍一些来自主动剧本针对Web办事器的进击。凡是情形下,HTTP的头信息外面包括了以下信息:
Server: Apache/1.3.33 (Unix) PHP/5.0.3 mod_ssl/2.8.16
OpenSSL/0.9.7c
在 expose_php 选项翻开今后,PHP的版本信息将不包括在下面的头信息里。
固然,用户会见网站的时分一样可以看到 .php 的文件扩大名。假如你想全部的利用分歧的文件扩大名,你需求在 httpd.conf 中找到以下这行:
AddType application/x-httpd .php
你就能够修正 .php 为任何你喜好的文件扩大名。你可以指定恣意多个的文件扩大名,两头利用空格停止朋分。假如你想在办事器端利用PHP来解析 .html 和 .htm 文件的时分,那末你设置选项以下:
AddType application/x-httpd .html .htm
(解析HTML:设置装备摆设你的Web办事器利用PHP去解析一切的HTML文件,然而假如非办事器端代码也需求PHP去解析,会影响办事器的功能。静态页面你可使用分歧的扩大名,如许可以消弭对PHP剧本引擎的依附,加强功能。)
[  文件体系平安 ]
平安形式限制了剧本一切者只能会见属于本人的文件,然而你可使用 open_basedir 选现来指定一个你必需会见的目次。假如你指定了一个目次,PHP将回绝会见除该目次和该目次子目次的其他目次。open_basedir 选项可以任务在平安形式以外。
限制文件体系只能会见 /tmp 目次,那末设置选项为:
open_basedir = /tmp
[  函数会见掌握 ]
你可以在 disable_functions 选项中利用逗号朋分来设定函数名,那末这些函数将在PHP剧本中被封闭。这个设置可以任务在平安形式以外。
disable_functions = dl
固然,一样的你可以利用 disable_classes 选项来封闭对一些类的会见。
[  数据库平安 ]
假定你的PHP剧本中包括一个基于表单值来履行的Mysql查询:
$sql = "UPDATE mytable SET col1 = " . $_POST["value"] . "
        WHERE col2 = 'somevalue'";
$res = mysql_query($sql, $db);
你但愿 $_POST["value"] 包括一个整数值来更新你的列 col1。可是,一个歹意用户可以输出一个分号在表单字段里,接着,是一段他/她想被恣意履行的SQL语句。
举例,假定上面是 $_POST["value"] 提交的值:
0; INSERT INTO admin_users (username, password)
VALUES ('me', 'mypassword');
那末当这个查询发送给Mysql查询的时分,那末就酿成了上面这条SQL:
UPDATE mytable SET col1 = 0;
INSERT INTO admin_users (username, password)
VALUES ('me', 'mypassword');
WHERE col2 = 'somevalue';
这分明是一个无害的查询!起首这个查询会在 mytable 内外更新 col1。这个并没有甚么费事的,然而第二个表达式,它将履行 INSERT 表达式来拔出一个能上岸的新办理员。第三个表达式就放弃了,但同时SQL解析器将抛出一个毛病,这个无害的查询才完成。这个进击就是人人常说的 SQL injection(注:SQL注入)。
固然,SQL injection 存在一个成绩,对方必需懂得你的数据库布局。在这个例子中,进击者是晓得你有一个表 admin_users,而且晓得包括 username 和 password字段,同时,存储的暗码是没有加密的。
除你本人,普通的网站会见者是不晓得这些关于数据库的信息。可是,假如你利用了一个开辟源代码的在线电子商务法式,或利用一个自在的会商版法式,这些数据表的界说都是已知的,或有一些用户可以会见到你的数据库。
另外,你的剧本输入会提醒一个查询毛病,这些信息里包括了良多关于数据库布局的主要信息。在一个正常任务的网站上,你应当思索设置 display_errors 选项为 off,而且利用 log_errors 来取代 display_errors ,把正告和毛病信息拔出到文件中。
(数据库权限:它是一个十分主要的器材,你只要准确的权限,才干经由过程剧本准确的毗连数据库。你应当不要在剧本中利用办理员去毗连数据库。假如你这么做,那末一个进击者将能够获得全体的数据库权限,而且包含其他不异办事器的权限。进击者将能够运转 GRANT 或 CREATE USER 号令来获得更多的会见权限。 )
假如你要避免 SQL injection 进击,你必需包管用户表单里提交的内容不是一个可以履行的SQL表达式。
前一个例子中,咱们利用一个整型值来停止更新。假如在单引号前面跟上一个字符串,这个进击者在分号之前必需提交一个闭合的援用在全部SQL表达式中。可是,当 magic_quotes_gpc 选项是开启的时分,在Web表单中提交的引号将主动被本义。
为了避免被歹意的进击者停止 SQL injection进击,你应当老是确认提交的数据是正当的。假如你需求的是一个整数值,那末你可使用 is_numeric 函数来测试这个表达值,或利用 settype 函数来转换为一个数字,排除任何一个傻傻的SQL语句。
假如你开辟的法式需求几个提交的值在一个SQL表达式里,你可以利用 sprintf 函数来构建一个SQL字符串,利用格局化字符来唆使数据类型的每一个值。看上面的例子:
$sql = sprintf("UPDATE mytable SET col1 = %d
                 WHERE col2 = '%s'",
                 $_POST["number"],
                 mysql_escape_string($_POST["string"]));
在上一个例子中,全部Mysql的数据已被利用,所以这个字符串已经由过程 mysql_escape_string 函数停止过滤。关于其他数据库,你可使用 addslashes 函数停止本义,或利用其他办法。
  可以说你的马步已经扎的差不多了,接下来就要开始练把势的时候了,如果有条件的话,用笔或者打印一个简易的PHP手册在身上,时不时的摸出来看看,记得,去WC也不能放过(^2^)。
飘灵儿 该用户已被删除
沙发
 楼主| 发表于 2015-2-4 12:39:36 | 只看该作者
爱上php,他也会爱上你。
再见西城 该用户已被删除
板凳
发表于 2015-2-9 22:39:14 | 只看该作者
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
金色的骷髅 该用户已被删除
地板
发表于 2015-2-15 09:14:40 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
愤怒的大鸟 该用户已被删除
5#
发表于 2015-3-2 11:35:54 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
若天明 该用户已被删除
6#
发表于 2015-3-6 19:22:43 | 只看该作者
做为1门年轻的语言,php一直很努力。
兰色精灵 该用户已被删除
7#
发表于 2015-3-7 12:53:33 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
小女巫 该用户已被删除
8#
发表于 2015-3-11 02:56:36 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
灵魂腐蚀 该用户已被删除
9#
发表于 2015-3-11 05:24:50 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
因胸联盟 该用户已被删除
10#
发表于 2015-3-17 21:09:44 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
莫相离 该用户已被删除
11#
发表于 2015-3-25 02:39:27 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
若相依 该用户已被删除
12#
发表于 2015-3-27 08:41:51 | 只看该作者
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
柔情似水 该用户已被删除
13#
发表于 2015-4-6 03:11:54 | 只看该作者
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
变相怪杰 该用户已被删除
14#
发表于 2015-4-12 13:27:54 | 只看该作者
做为1门年轻的语言,php一直很努力。
爱飞 该用户已被删除
15#
发表于 2015-4-16 05:39:43 | 只看该作者
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
再现理想 该用户已被删除
16#
发表于 2015-4-16 23:39:52 | 只看该作者
微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox  支持的不是很好,所以能少用还是少用的好。
海妖 该用户已被删除
17#
发表于 2015-4-21 05:10:01 | 只看该作者
爱上php,他也会爱上你。
分手快乐 该用户已被删除
18#
发表于 2015-5-1 20:49:14 | 只看该作者
当然这种网站的会员费就几十块钱。
深爱那片海 该用户已被删除
19#
发表于 2015-5-8 00:58:57 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-20 21:24

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表