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

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

如何用PHP把RDF内容插入Web站点之中(一)

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

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

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

x
名誉和巨大的财富) j' s+ @. {$ M0 [
/ D& W; S6 Z9 O" [4 l0 o* q0 }
设想一个从最热门的门户网站获得最新的新闻的站点。股票价格,天气信息,新闻故事,线式讨论组,软件发布……所有这一切都将被动态更新,每小时一次,不需要任何手工干预。我们可以想象这随之而来的站点访问量,源源不断的广告收入以及网管大人所受到的“阿谀奉承”。
; \! W6 M: ^, Y" U9 g& R) R) F0 i' }9 q# W4 S0 b8 O( R7 v
但是现在,停止幻想,开始阅读,因为只要你密切关注此项技术,说不定你就能成为站点的主人。 对你的要求也只是稍许的想象力,一些聪明的PHP编码和几个免费的RSS文件。另外,很明显还包括这篇文章剩下的九个部分。
& ~8 L+ ]3 D- F* B; \7 o3 I) S! ?: c- J3 c' B1 z4 F$ c0 G
有内容,就联合成辛迪加(Have Content, Will Syndicate)+ ^/ J+ _1 j# Q4 w
我们从最基本的开始——那么RSS究竟是什么鬼东西呢?. {$ B' I5 W6 v& w: A
) n- X& K6 H. |  o1 I
RSS(即RDF Site Summary)是一种格式,最早由Netscape公司设计,用于分发其门户站点My.Netscape.Com上的内容的描述信息。自1997年被提出以来,几经沉浮——可以点击文章末尾的链接,了解一下RSS悠久复杂的历史。现在的稳定的版本是RSS1.0,符合RDF规范。这一版本可以说即轻便又功能齐全。; M* b6 r: u7 o' @
* Z! d, v8 Q5 n; x% [# l- ]
RSS使得网管及时公布和分发某一特定站点的特定位置的最新最有趣的内容的描述信息变的可能。 从新闻文章列表到股票市场数据或着是天气预报,所有这些信息都可以通过结构良好的XML文档来发布,从而也可以被任何XML分析器进行分析,处理和翻译。
5 H+ @. z' S7 w, Z% C2 S% j2 J/ y( S. z/ X% {
网站上最新信息的列表是经常更新的,而RSS使得这一列表的分发成为可能,也就为Web上简易的内容辛迪加联合打开了大门。想了解这其中的道理,请看下面这个简单的例子:
; Q( T& i1 @0 `6 `* n6 G! b, w
& Y' i( _. j  t5 ?站点A,属新闻站点(“内容辛迪加组织者”),能够每小时发布一个包含最新新闻列表以及相应链接的RSS文档。 而这一RSS文档可以被其它站点获取(如站点B,“内容收集者”),分析并显示在站点B的索引页面上。 每次站点A发布一个新的RSS文档,站点B的索引页面都可以自动更新,以获取最新的新闻。# G  |6 k( v7 L3 R

8 k& S6 c% r/ ~+ _; Y这种方案对交易中的双方机构都有效。 既然RSS文档中的链接都指向站点A上相应的文章,那么站点A将迅速体验到访问量的增加。 而站点B的网管可以休假一个星期,因为他有办法自动更新其站点上的索引页面,而这一方法仅仅是把索引页面与站点A发布的动态内容相连接而已。3 J/ F3 \- f0 q
' i+ a2 H9 d) w% \: w
有许多受欢迎的站点向公众提供详细的RSS或RDF新闻,如Freshmeat(http://www.freshmeat.net)和Slashdot(http://www.slashdot.org),当然还有其它许多站点。在这篇文章当中,我将广泛的使用Freshmeat网站的RDF文件。需要说明的一点是,这里所谈到的技术也可以应用于其它任何RSS1.0或RDF文件。
9 L3 l8 V5 a5 [2 w
, f2 i2 H- {. C+ ]3 A- d- @交换频道(Switching Channels)2 s- t/ Y9 \1 t0 s
7 _& A4 i& i- E1 y
典型的RSS文档包含一个由描述性元数据标记出来的资源列表(URLs),请看下面的例子:
3 a1 Z$ _6 r$ _
- [8 Y9 o7 J; P$ E<?xml version="1.0" encoding="UTF-8"?>7 n/ i& ~7 y. O( e$ B' C- F/ H- k" q
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"3 n( c$ `+ O7 w8 U) u; {! ]% o
xmlns="http://purl.org/rss/1.0/">
  `1 U' N' X$ i0 S3 W! ^, m& d: W. t2 v, P  n2 X% A! ^& g. [1 p
<channel rdf:about="http://www.melonfire.com/">
0 o/ @6 N7 M5 Q' E\t   <title>Trog</title>! H# L+ g, s% w& w! e/ w& @* y
\t   <description>Well-written technical articles and
7 Z% k% x: ?1 p" w' C6 h" htutorials on Web technologies</description>/ M- c* Z. k6 }) g$ l) C
. p% i3 r; ]$ w3 S: P
<link>http://www.melonfire.com/community/columns/trog/</link>
: ~' m) Q! c, F/ c\t   <items>
1 N( r2 ]3 q3 f# g. a8 m7 z5 M0 z2 d\t\t   <rdf:Seq>9 A" d$ M" }" w6 Q' H" U
\t\t\t    <li
7 Q$ a* E. k7 J. ordf:resource="http://www.melonfire.com/community/columns/trog/article.ph' G+ ~. b; k7 u; V5 x8 L1 f4 I/ j- h$ Y: [
p?id( P* [3 L  K# `% x7 x% o8 y9 A( s& p% Q
=100" />
1 Z3 Q0 Q- Z1 L+ C, q' P# T\t\t\t    <li4 ^# l5 h) o4 s* t* J# [) B
rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph9 ]( P2 n7 v2 K% W# m
p?id
7 x' z# ~5 N3 ^' S- [=71" />: e3 a) }+ N; r  y
\t\t\t    <li
( h# E; q# f  T3 z+ `rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph
( `' b9 Z5 P6 V: K* b4 v: w1 J, Xp?id5 H+ ^3 n* H6 t. `* B! Q8 W
=62" />
9 C8 K- C# u% T\t\t   </rdf:Seq>
! Q  v5 h7 Q4 Z6 m5 T  z* A9 p& [\t   </items>2 y( d1 r- [! r$ ?
</channel>
, q' Y* ~' b9 ?! H9 Q- D5 ]( a" w- d* F" r: p9 }- Y- }; i
<item
! i! o7 Y) ~# Frdf:about="http://www.melonfire.com/community/columns/trog/article.php?i7 B, \. L, p4 C0 r# E/ j6 ]2 K! R% Q
d=10/ d4 y* n0 h/ {
0">
8 F* D2 {9 L; L) t+ D* N8 a- d& l0 Z\t   <title>Building A PHP-Based Mail Client (part 1)</title>! @1 d1 v1 d  J  Q, A

, K! o. X4 g/ W0 U$ _1 D<link>http://www.melonfire.com/communi ... /article.php?id=100& @. y8 M7 P* G2 [! I1 G
</li4 y& M& i* n0 Z. h7 H
nk>
* W% K. M$ M5 `\t   <description>Ever wondered how Web-based mail clients# T/ S* N/ m5 i! I( `. G* Y
work? Find out here.</description>
, G" |: I+ L0 W/ x2 L4 f# \( t </item>
3 K% A2 s7 _4 e1 o' c7 F% J/ r( i4 U  [* r# g2 `: ?
<item
& ]. n! A; {( D. H, C) E0 ~rdf:about="http://www.melonfire.com/community/columns/trog/article.php?i. g7 Z1 A$ z9 k$ y; e9 L8 h9 d
d=71">! x' P% X$ X+ D3 a
\t   <title>Using PHP With XML (part 1)</title>
8 z' g+ l" v. y( x* z- S7 d. ?0 X% {. f$ v5 d& B2 T+ @
<link>http://www.melonfire.com/communi ... ticle.php?id=71<. b3 O4 J; _% s# b4 q4 C# Z
/link>
: M! X& e# B4 A) m: W' X\t   <description>Use PHP's SAX parser to parse XML data and
2 r5 S( S+ c) ~( M# sgenerate HTML pages.</description>1 A0 O6 E$ k+ z+ d; H" Y
</item>
0 C9 f: K  R7 {3 Y) Y2 c" s5 [0 Y$ z* R( m+ v& J% D* {
<item4 L, B2 |( U* Q4 C* U  f) C
rdf:about="http://www.melonfire.com/community/columns/trog/article.php?i
2 y3 d+ E# ?. }d=62">
* ^% ^; t* S5 C, H) \  W\t   <title>Access Granted</title>
* I$ |) [+ f5 T; S+ t) m4 `( L9 M0 R) h
<link>http://www.melonfire.com/communi ... ticle.php?id=62<
( e) l. g& S* q$ G: N0 w/link>4 z( F4 b, K+ ^3 S- b8 [9 t$ U5 D; N& `
\t   <description>Precisely control access to information
: r9 k, J$ E# i4 t, D" iwith the mySQL grant tables.</description>
/ o1 @% H6 F; o4 r4 s  U1 x </item>4 v$ ]4 C6 U$ g2 X/ L4 }2 T; [

# V  g" v* {  E' r' ?' H1 d: d你可以看到,RDF文件由几个界限分明的部分组成。首先是文档序码(prolog),! e: D5 M4 \* D; o( G3 t: j1 U% n' J

6 i3 f1 _' x% |  }3 q6 y" A<?xml version="1.0" encoding="UTF-8"?>
1 L9 A. o# T. v, H# Y5 t( |, N  b% K, G' L2 Y, H* e5 j
然后是根元素中的名称空间声明。
1 f8 b! a: g$ P+ E0 `
+ q( F9 e/ i3 K3 ^: e  o<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- e& t, _' j3 w% l( v; R* n- Nxmlns="http://purl.org/rss/1.0/">) `7 q) f: W! w
    接着是<channel>部分,这部分包含了RDF所要描述的频道的一般信息。在上面的例子中,频道是Melonfire网站的Trog专栏,专栏内容是新的技术文章和指南,每星期更新一次。) t: ?) L" M: e0 H2 M: h9 e

2 R- H( ^" g5 v# x<channel rdf:about="http://www.melonfire.com/">. `, x1 c5 e5 t5 F  C
\t   <title>Trog</title>" l% o3 O/ L" w0 c0 x6 \, `. @
\t   <description>Well-written technical articles and& `( }+ A$ q) G8 q. W
tutorials on Web technologies</description>
8 W& A3 `9 j6 r0 d. j3 u  p5 k. y" e5 q( ]5 c+ H
<link>http://www.melonfire.com/community/columns/trog/</link>5 A8 N1 k2 b- w1 a6 u( S, J
\t   <items>. }" p3 O& w# }; \) ?
\t\t   <rdf:Seq>
/ d9 Y+ ?( {# u( K\t\t\t    <li
( J$ c& B& G- l) O  ordf:resource="http://www.melonfire.com/community/columns/trog/article.ph
/ {2 o  J  u! Op?id
% T7 y' z9 G+ x1 B( Y=100" />
/ I' E, e7 ^4 D( }  s\t\t\t    <li9 Q( r+ d/ j* D) y
rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph  Y+ U+ `& e( W* R, x
p?id
* ?, P* Q3 B0 _9 }=71" />
- y" W& p  x. i3 `\t\t\t    <li
/ J2 O: F$ q, [9 n6 v1 `5 yrdf:resource="http://www.melonfire.com/community/columns/trog/article.ph# R. I' q) @4 `0 c( [
p?id, [3 |: |- X8 }% k1 H# g9 c4 |
=62" />
. e  X, U# k1 j: }8 S\t\t   </rdf:Seq>6 R5 X9 p* z9 k: A% f3 H" h& L
\t   </items>
5 L( w4 o& y1 f4 C0 I( j    </channel>6 n8 D% l) u- T( N6 p- C5 a% q

+ D$ U# O6 r0 V1 e<channel>区包含了一个<items>区块,<items>区块又包含了文档中描述的所有资源的一个顺序列表。该列表通过一系列的<li />元素来表示。区块中每一个资源都在后面的<item>区块中有更详细的描述。
( I: B" c% U$ Y0 Q
- y1 a& n+ X+ B4 |& R* v<items>
+ c$ y$ G1 `- R& ]1 @7 j9 d* L0 y\t\t   <rdf:Seq>4 B, O# Z0 Q3 m% n1 ?, n# @3 u
\t\t\t    <li4 B* ^0 L5 O- m8 q
rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph0 k0 O& g3 M! k( i
p?id
. ?- ~" E2 M7 E. O4 _* Z  B=100" />
4 R  x: [" f. `; r\t\t\t    <li
7 r  `0 F7 A* B0 {- z) ordf:resource="http://www.melonfire.com/community/columns/trog/article.ph
9 p5 {, _0 k$ p2 Pp?id& |, [6 F3 P* Z6 O( X6 S
=71" />
* Z# V' {# }1 W! {: N8 @\t\t\t    <li
. J: Z0 \" C9 D3 srdf:resource="http://www.melonfire.com/community/columns/trog/article.ph
) ]2 a$ U8 `% j* _p?id
. [, B% \  }& K& i( M; @=62" />
3 f8 w6 u; o) [; o! G\t\t   </rdf:Seq>6 k" |1 ~7 j% u' f- T& F
\t      </items>, K5 Q9 ~; t/ W. _& T" ^4 ]2 ~/ I
2 y, E4 M3 q% c( H5 ^# M
还可以在其中放置一个<image>区块,这样你就可以发布频道标志的URL。* j& ~! v  V6 z, T
# y8 X8 Q! O  Y, H% J# q% W
所以为了肉,RSS1.0文档中的每一个<item>区块都更详细地描述一个单独的资源,包括标题,URL和资源描述。2 Q  m& n3 \) Y/ k: k# {* o

: p/ {# _, F0 j% l  <items>8 u/ J0 S* _, X5 ?8 M
\t\t   <rdf:Seq>
/ ~' i5 K" U7 q\t\t\t    <li' \2 V8 g7 j9 d0 I. Q9 }
rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph
6 p: O, Q/ w6 `* {. _1 np?id
& y6 Y% S, h9 E1 y+ {=100" />
# G4 C* \9 ?4 L& L\t\t\t    <li: X( L/ A5 Z% j) U" o8 Z6 i, l
rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph
' s* B1 B$ ?8 t, ~% Lp?id
% y% [" l% I1 y5 e=71" />
) S7 A9 Y% S3 M6 Y2 ~\t\t\t    <li
. y% C& p, F  T& A9 G" erdf:resource="http://www.melonfire.com/community/columns/trog/article.ph% ]$ X( e+ c  w1 K1 A
p?id
* [7 b+ \$ `, C; H5 N=62" />" d0 O, B( J0 u  y2 d+ A
\t\t   </rdf:Seq>3 u) n6 o7 P. n( x: s) b
\t      </items>/ v# i- f: g* ~

7 |  U7 O3 {5 V& }- D2 U: t# R在这个例子里,<item>区块描述了Ttrog“频道”中单独的一篇文章,并为这篇文章提供了描述和标题,以及URL。内容收集者可以利用URL创建“向后”链接。5 f7 }8 ?  C0 F; j  Q' T! d+ x  ]

$ _- \# u" Z! x3 b# {你看得到,RSS1.0文件相当地直观明了,不管是手工,还是通过编程,都非常容易创建。上面的例子和解释仅仅是说明性质的,通常,你可以用RSS1.0和RDF做更多的事情。你最好看一下文章末尾提供的链接,以获取更多的信息。不过在这之前,我们再花几分钟讨论一如何将RSS1.0文档插入到你自己的Web站点之中。1 }: m7 O- z1 Z$ w

2 V- P6 `) h# L7 V( E
You look down on me today, tomorrow I can't let you have been

精彩评论6

花传贺 发表于 2016-6-25 23:38:53 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
潮务点 发表于 2016-6-25 23:40:21 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
广翠宪 发表于 2016-6-26 04:35:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
棣枝广 发表于 2016-6-26 14:57:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
广翠宪 发表于 2016-6-26 16:05:17 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
保庆燕 发表于 2016-6-27 00:33:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

关注0

粉丝6

帖子3328

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

扫描微信二维码

关注华域联盟公众号

随时了解更新最新资讯

admin@cnhackhy.com

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

在线QQ客服

Powered by cnhackhy! © 2015-2019