• 设为首页
  • 点击收藏
  • 手机APP
    手机扫一扫下载
    华域联盟APP
  • 关注官方公众号
    微信扫一扫关注
    华域联盟公众号
hot天融信关于ThinkPHP5.1框架分离RCE漏洞的深

[/backcolor] 0x00 前言在前几个月,Thinkphp连续迸发了多个严重漏洞。由于框架应用的普遍性,漏洞影响十分 详情

PHP的十个高级技巧(上)

[复制链接]
sterben 发表于 2016-5-10 17:57:31 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

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

x
全球超过300万个互联网网站的管理员都在使用PHP,使得它成为最为普及的服务器端脚本语言之一。其特点是运行速度快、稳定可靠、跨平台,而且是开放源代码软件。随你使用的水平不同,PHP可以很简单,也可以很复杂,可以只使用它发送HTML表格元素,还可以在PHP应用程序中集成Java和XML。 6 g& k8 n& x  K) B: O) A+ z

1 ^' P  O0 ~3 L5 a- S" H- e2 o  如果你对PHP有一定的了解或者看过一些初步的教材,这些技巧可以扩展你对PHP的认识,使你掌握一些常见的和高级的PHP功能。
2 D9 K, F, h) B9 o) h# t* _( k: [3 W! [* L7 r: H, t$ @
一、把PHP安装为Apache的DSO / x& p$ ]$ \& `; z5 y5 y, _
  PHP在Linux/Unix平台上经常与Apache搭配使用,在安装PHP时,有三种安装方式可供选择:静态模式、动态模式(DSO)、CGI二进制模式。 % j' R( ~" {6 I! w1 v$ s

% o) K( x* V- E. \4 r% P  由于易于维护和升级,我强烈建议以DSO方式安装PHP。例如,初次安装时如果安装的PHP仅支持数据库,随后希望再安装支持加密的模块,只要运行“make clean”,添加新的配置选项,然后再运行“make”和“make install”即可,一个新的PHP模块就会安装在Apache中适当的位置上,然后重新启动Apache,而无需重新编译Apache。 ; H! Q8 ~- t* g/ A
- v& B" p) |( ?! e4 c1 i
  下面的步骤将安装一个全新的Apache,并以DSO方式安装PHP: $ _8 m+ p7 ]% r: X9 J" i( r

# `2 N" |1 V- O  B  1、从Apache软件基金会得到最新版本的Apache源代码; 8 M9 Y; X' v' B3 Q0 e4 q
  2、把得到的源代码放到/usr/local/或者/opt/目录下,或者你指定的任意目录中;
5 w, _' l$ y* i& o5 e  3、运行Gunzip对文件进行解压缩,得到后缀为.tar的文件; ( M& c; R; s; D- t
  4、运行下面的命令,把文件安装到apache_[version]目录中:
% ?/ x4 f8 C  t; x: O( E( R: |- i" x, w/ o
   tar -xvf apache_[version].tar % X- [$ Q% E0 u5 y1 C1 y/ R

+ K& g3 Y$ ]1 F4 P$ ^; [& `  5、进入/usr/local/apache_[version]目录(或者在步骤4中安装压缩文件的目录);
, O9 s; |) v, n9 ?0 j  6、键入下面的命令为编译Apache作准备,用你自己的路径替换其中的[path],例如,/usr/local/apache[version],现在已经设置了mod_so的新值,它将允许Apache使用DSO模块;
0 v0 _7 y, `3 N, J6 s0 i( k  7、回到提示符状态后键入make,并等待再次回到提示符状态;
4 L9 z" Q+ v, A- u  8、执行“make install”命令。
, V! Q( c% J# }; S$ S
3 |6 \8 E, Y5 a5 o* Y9 {  至此,Apache已经安装完毕,系统将重回到提示符状态。接下来我们开始安装PHP: ; D) w- V' L/ `1 ?  [& Z
1 q$ ]  W% r' d, J( W, H, u6 o
  1、在PHP主页的下载区中找到最新版本的链接; + b0 w7 u0 \; J& d
  2、把文件下载到一个适当的目录中,例如/usr/local/或/opt/或者你指定的任意目录中;
1 {8 M5 v3 k2 c  3、运行Gunzip对文件进行解压缩,得到后缀为.tar的文件; $ ~5 J5 q# P, [8 m3 ^% M
 4、执行下面的命令把文件安装在php-[version]目录中:
- ^) N9 l$ Q  ^# k; ~7 H9 n& f, I+ d9 @1 K
   tar -xvf php-[version] " K4 F& C# t7 w4 e! Q5 j( R
3 R' ]( D+ E. \/ |3 C' k
  5、进入/usr/local/php-[version]目录或在步骤4中指定的目录;
8 N% |: k7 H+ `: E! ?, z" y- l) k1 A3 j
  至此,已经作好了以DSO方式安装PHP的准备工作,唯一需要修改的配置选项是with-apxs(这是Apache的bin目录中的一个文件)。为了得到较高的性能,我没有安装对MySQL的支持模块。   J3 @% c: I# _( C
. b- l$ C4 @7 y( |. p' u( M4 _
  ./configure --with-mysql=/[path to mysql] --with-apxs=/[path to apxs]
% S/ s$ u# _1 A& ?6 {; b% N: c4 ?0 S+ O% T. c
  6、回到提示符状态后执行make命令,等待重新返回到提示符状态; ( }( e# u+ @, @7 h6 i
  7、执行make install命令。
1 z' J: k' ?! s9 t" a3 A8 k/ X6 ^/ ]+ u* `3 m
  至此,系统以DSO方式在Apache的模块目录中安装了PHP,并对Apache的httpd.conf文件作适当的修改后返回到提示符状态。回到提示符状态后,你还需要对Apache的httpd.conf文件作一些修改。 & J* y) s- E8 G3 D  U

/ F/ V8 z# x" i5 b# }  1、找到包含有ServerAdmin的一行,添加你的电子邮件地址,如下所示:
) Q; Y2 H5 t* V: E4 V& Y1 w% y/ S2 U3 \: e9 N* D
   ServerAdmin you@yourdomain.com
4 ?5 G, H8 h' _1 W% J$ A- o
) J* }* s+ f" @5 b8 o  2、找到以ServerName开头的行,把它改为真正的值,例如: 6 L- u" n; ?1 [' S3 q: ^( ~
2 D0 B6 V$ v- e7 @! o/ u: k
   ServerName localhost . N/ H3 P6 [" L1 F) N

  c/ k5 i* S2 V# e" T) F" W: B4 R  3、找到内容如下所示的小节: * S2 P: {) t( c* `

8 o+ R+ S+ b9 x! n" p5 u. j' p  # And for PHP 4.x, use:
) |4 J( P1 a: x7 s5 t* k. ]" c  # 8 B2 W7 a* d* c; H4 e% ~" s8 }" ?6 R8 M
  #AddType application/x-httpd-php .php / V/ b8 S# I6 r7 o
  #AddType application/x-httpd-php-source .phps
1 u7 u# e' ]+ g8 U& i3 y+ a' F6 Z% \/ H' N* \1 k  w
  修改这些行的内容,使PHP 4.0的AddType不再成为注释,并添加希望在PHP中使用的文件后缀名,上面的内容变为如下所示的内容:
: X  R+ a- L$ {( C, Q2 w% V1 {$ s7 t' b/ ^6 ^0 J
  # And for PHP 4.x, use:
/ v- u- e) T, l! m) z8 ^  l6 _/ g  # ( F$ n, p+ r1 B4 ]0 r4 {0 M
  AddType application/x-httpd-php .php .phtml , @' {: h4 G7 |4 l
  AddType application/x-httpd-php-source .phps ; j5 J+ B2 u+ r4 b9 p
4 ?0 F+ L1 k  B) `7 l! j
  保存文件,回到上一级目录,执行下面的命令重新启动Apache:
: P5 }2 z" U) c7 c* J) e5 X7 ]+ ?. N/ z3 Q* }
  ./bin/apachectl start & }- f/ A2 l. [* l: G/ \& q
9 ^5 V$ e0 P7 F9 f& g0 ?
  如果在启动时没有出现错误提示信息,就可以通过创建一个名为phpinfo.php的只有如下所示一行内容的文件,对安装的Apache、PHP进行测试:
- g( N0 v7 o7 _6 T- L3 u  L/ m6 C- W
  <? phpinfo() ?> 2 i4 E; q: k: I* O/ X: d( s

& L9 F- z' R6 }, I  把这个文件保存到Apache的文档根目录(htdocs)中,然后开启浏览器,键入http://localhost/phpinfo.php地址,屏幕上就会出现许多的变量和它们的值。
1 M! ?2 Q9 i5 P/ z4 y1 o
+ L7 e! V& L! ^/ s  V  如果要重新配置PHP,需要再次运行make clean命令,然后执行带有一系列选项的./configure命令,然后再执行make和make install命令,Apache的目录模块中就会出现一个新的模块,只要再重新启动Apache加载这个新的模块,就一切OK了。 0 u- \+ m. d' j

5 t! h. i. S9 V: W4 L' d, B二、使用PHP本身的对话 7 z/ z3 _$ d$ R, @

6 ?' G: K/ ~4 j0 K, o  PHP 4.0中最令人期待的特性应该是对对话的支持,PHP 3.0的用户必须使用第三方的软件否则就不能使用对话,不支持对话一直是PHP最大的缺憾之一。
" `4 C7 f3 i& T9 Y) D  s: {
$ w5 Z0 h: l) P: k4 N  只要用户在浏览你的网站,你就可以利用对话维护与特定用户有关的变量,而无需建立多个cookie、使用隐藏表格字段或将信息存储在数据库中。 $ _# P" d+ @8 i2 L, q/ O" E+ Q

( z3 P$ z- |4 k! p  在一个网页上启动一个对话,就会使PHP引擎知道你想启动一个对话(如果还没有启动)或者继续当前的对话: 7 v: Q1 |9 L# M+ l% c$ O
0 a& z  k0 H- V7 z. `5 P
session_start(); : P  G- k6 o- z. U

6 i( q3 }" e9 O: t8 r- r; d5 \  启动一个对话将通过cookie向用户发送一个识别字符串(例如940f8b05a40d5119c030c9c7745aead9),在服务器端,会创建一个与识别字符串匹配的临时文件,例如sess_940f8b05a40d5119c030c9c7745aead9,这个文件中包含注册的对话变量以及它们的值。 3 M& b; ~& I) _% `
  u$ z$ ?+ R/ `9 x# b5 A) s
  用来显示对话的作用的最常见的例子是访问计数器。启动PHP模块,确保PHP代码是文件的第一行,在PHP代码之前不要有空格、HTML代码和其他的代码。因为对话会发送一个头部,因此如果在session_start()之前有空格和HTML代码,就会得到一个出错信息。 0 W( L  x6 F2 `' }9 f% o% {; J
& {$ D  f6 J" j( H8 ^
  <? 6 V8 z  F' E; X  O. `: [
  // 如果还不存在一个针对某用户的用户,则启动一个对话: % k9 G  w( k  l8 X# M* i( \' m
  session_start(); ) ^' f! {& f; L! K. t
  然后注册一个名字为count的变量:
8 t8 g1 w5 \$ K6 H% M6 K  session_register('count');
4 `% V" k6 ^6 {" d7 D7 A. i: L- n) z3 ]: F! X, S3 L0 a
  注册一个对话变量后,只要对话存在,名字为count的变量也就存在。现在,count变量还没有被赋值,如果对它执行加1操作,它的值就变为了1。 % C2 Z  \+ p  E& ~& ?2 p, Z% R4 M

( K: G5 h% }  W+ F  d( K  p# @  $count++; ! V- t' G0 X* F' J3 s
: j0 ]: ]- x4 b* |! M, s1 {6 L
  把上述内容综合在一块儿,如果还没有启动一个对话,就会启动一个对话;如果不存在一个对话id,就为用户指定一个好了,注册一个名字为$count的变量,对$count执行加1操作表示用户已经首次访问了该网页。 ( N1 r) A% m: c

% }. p  g8 i8 R. @, I  要知道用户在当前的对话中访问本页面的次数,只要显示$count变量的值即可:
. y! `8 `( g* _
& Q6 o$ P/ H- I5 |9 Y6 ]; N& O  echo "<P>You've been here $count times.</p>";
2 X5 q( o0 b5 ^" `$ u+ E0 E8 X! y
8 I. X6 D( B- s: i3 {4 l) v: r' k0 y  全部的访问计数器代码如下所示: 8 }: u9 {$ e5 @$ h2 Z2 Y. f
) _# N" X$ t; d: N0 H
  <?
1 f3 L6 W  k2 f0 g  session_start();
3 g6 a( z( k' @/ n  session_register('count');
1 d2 P; `) T. X# C  $count++;
+ k8 [% |9 a+ U) k0 _( ?- X3 W  echo "<P>You've been here $count times.</p>";
- G5 i% W( L5 C8 m! f- t6 v/ z6 J  ?>
5 |: [' T7 S+ [" n" F: F3 _: q/ H, `3 M/ P, ]
  如果重新加载上述的脚本文件,就会发现变量count的值增加了1,很酷吧。
) _" A, F" Z  R; S% Y2 a+ G  还可以在对话中注册一个数组变量,假设我们注册了一个名字为$faves的变量:
. T- _% D' h! c  [  o( j3 ?( J' o- F" Q' ?, W
  $faves = array ('chocolate','coffee','beer','linux');
! x; n8 W9 Y! _  可以象注册一个简单变量那样注册一个数组变量: 1 p5 [9 x' `3 R* j; @  a; D* g& L
  session_register('faves');
/ s. t* w2 J; g1 I' c& P6 L) M; f; h# N& u2 v! O
  引用数组变量与引用简单变量没有什么二样,如果一个用户在网页上指出在生活中的爱好时,可以把他的爱好注册到一个被称作$faves的数组变量中,然后可以在另一个网页中很方便地把这些爱好显示出来: ) D9 Y0 X# G" U+ q0 f

7 {. n. m3 d2 V8 l+ p8 T% Z) F  <? " x/ I6 s1 J4 ~0 |0 n1 r
  session_start(); 8 Q  H3 z: O0 x; y( X
  echo "My user likes:
3 i* l- ~* Q5 J2 ~+ f. ?# s7 o  <ul>"; ! v4 V$ U+ z( V. }; c; V
  while (list(,$v) = each ($faves)) {
( x. ?6 r2 ~4 `9 a  echo "<li>$v"; }
. \7 M+ z& T0 d& ^5 H  echo "</ul>"; 4 t7 g7 n% X/ T4 X
  ?>
; D/ O5 X, K) i  I% l2 V
# Z! ~9 F& W3 Q" S0 P7 s) M1 p  然后你就得到了一个关于用户爱好的清单。 : Z+ W1 i5 X% H) P
! P9 O. O/ k8 k
  对话变量不能被查询字符串覆盖,也就是说我们不能输入http:///www.yourdomain.com/yourscript.php?count=56给注册变量$count指定一个新值,这一点对于安全很重要:只能在服务器端的脚本中删除一个没有注册的对话变量。 8 P+ ]: _5 W9 b" E$ k
! w& M; b, H( K9 p
  如果要完全删除一个对话变量,首先需要从系统中注销它:
( G6 M$ r4 j. ]0 f
$ @4 {1 Q# x6 x, ~8 P: V  session_unregister('count'); ' Z/ |" h  j$ Y- b! Y  g
; T7 q( T* I. u& W2 N
  要完全删除一个对话变量的脚本是非常简单,如下所示: / o0 V# d3 u3 ^  N

; [: D& O( i& T% a7 x8 c5 i6 H  session_destroy();
+ y6 h5 d* w4 j  \$ {, m
7 G! w1 K# E# _  z6 Y  使用对话变量可以减少访问数据库的频率,使代码更加清晰,而且可以减少对用户发送的cookie的数量,它是最简单的方法了。: n# {# G  X( t2 I

: V3 ?+ [/ V7 ^- Q! {' P
You look down on me today, tomorrow I can't let you have been

精彩评论19

保庆燕 发表于 2016-6-25 20:26:22 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
汎阿青 发表于 2016-6-25 23:10:37 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
汎阿青 发表于 2016-6-26 16:45:16 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
宏艳昌 发表于 2016-6-26 16:47:43 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
汎阿青 发表于 2016-6-26 16:49:08 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
登洲远 发表于 2016-6-26 22:09:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
棣枝广 发表于 2016-6-27 11:36:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
汎阿青 发表于 2016-6-27 11:36:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
汎阿青 发表于 2016-6-27 12:28:27 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

关注0

粉丝6

帖子3328

发布主题
阅读排行 更多
广告位

扫描微信二维码

关注华域联盟公众号

随时了解更新最新资讯

admin@cnhackhy.com

在线客服(服务时间 9:00~18:00)

在线QQ客服

Powered by cnhackhy! © 2015-2019