分类目录归档:Web开发

在XAMPP中开启cURL

curl_logo

你需要在以下4个文件中,将第582行(;extension=php_curl.dll)开头的分号去掉。

  • xampp\apache\bin\php.ini
  • xampp\php\php.ini
  • xampp\php\php4\php.ini
  • xampp\php\php4\php4.ini

对$_SERVER['HTTP_REFERER']验证表单来源的一点看法

《PHP5与MYSQL5 web开发技术详解》一书的第五章,“处理用户输入”中提到,可以依靠验证$_SERVER[‘HTTP_REFERER’]来提高表单的安全性,对此我来谈谈自己的看法。

原书中说道,PHP的$_SERVER服务器超级全局数组提供了一个叫$_SERVER[‘HTTP_REFERER’]的变量,用于保存上一页的来源,比如表单提交或者超级链接的URL地址。如果有人从他的计算机中提交表单或从浏览器地址中直接输入当前脚本名称,该变量会保存表单来源或为空值,这样我们就可以通过它的值进行处理。

但事实上,$_SERVER[‘HTTP_REFERER’]这个变量其实是由浏览器端提供的,这个变量的值能否取到以及是否正确,其实是由浏览器决定。Web连接是不保持状态的,所有网页信息从服务器上下载到本地,再由本地提交到服务器,因此从本地篡改$_SERVER[‘HTTP_REFERER’]的内容完全是可行的。而且在许多情况下,$_SERVER[‘HTTP_REFERER’]是取不到值的,比如访问经JavaScript产生的链接、访问Flash中的链接、用meta进行跳转时等情况,而且有些客户端(浏览器)甚至会完全没有设置这个变量。

因此,我认为用$_SERVER[‘HTTP_REFERER’]验证表单来源从而提高安全性的做法没有意义。这种做法甚至连“轻量级”都算不上,完全是在浪费资源。提高表单安全性,还是应该强调对表单数据的验证。

《Zend权威认证试题讲解》

小弟不才,翻译了《Zend权威认证试题讲解》一书,现已授权PHPChina独家连载,欢迎大家前去阅读!

点我阅读

《Zend权威认证试题讲解》

译者序

Zend认证是全球公认且唯一的PHP认证标准。成为一位Zend认证工程师对任何PHP开发者来说都具有极大的意义——对自己PHP技术能力的证明,获得更好的工作机会与发展前途。本书中的题目均为模拟题。作者John Coggeshall与Marco Tabini都是Zend认证工程师,且参与过Zend认证考试与培训的相关核心工作。两人力图在本书中完美再现Zend认证考试的精髓,某些题目的难度甚至超过了真题。阅读本书将对通过Zend考试大有益处。

不过,翻译本书的目的却并不完全是为了帮助各位PHPer参加Zend认证考试。毕竟该考试的费用较高,国内的培训与考试机构也很少。且本书原著于 2005年,当时的考试面向PHP4,而目前已升级到面向PHP5。对国内广大PHPer们来说,这本书更大的意义在于它是PHP开发者的黄金标准。通过对本书的阅读,PHPer们可以从中发现自己知识上的缺陷与不足,从而再接再厉,向更高层次迈进!

本人才疏学浅,翻译中的错误在所难免,欢迎大家批评指正。
您可以通过以下方式与我联系:
E-Mail: blueven@yahoo.com.cn
QQ: 95224882
MSN: ven13@msn.com

最后,感谢Richard大哥给了我这次连载的机会。感谢我的女朋友斑斑在翻译期间给我的支持与帮助,明年的情人节我们一起过!

by Ven
2008-2-14

用tabindex属性强化用户体验

这里我们先来区分两种填写表单的方法:
第一种,用鼠标在表单项中切换。他们会先找到需要填写的第一项,用鼠标点上去,然后右手移到键盘上(我们暂且不管你的左手放在什么地方),填写信息,接着右手移到鼠标上,点选第二项,再把右手移到键盘上,填写信息……不断重复,直到表单填写完,最后用鼠标点击“送出表单”按钮。
第二种,用Tab键切换。他们在填写表单时只在填第一项时用鼠标点选,该项填写完成后用Tab键切换至下一项,最后用回车键送出表单。整个填写过程中,双手只停留在键盘上,不用摸鼠标。
哪种方法的效率高?大家一定都有相同的答案。
使用Tab键的好处不言而喻:双手始终在同一个设备上进行操作,大大提高了填写表单效率。但是它仍然存在几个小缺陷。比如,填写时至少需要操作一次鼠标,用来选定表单的第一项。有没有办法修正这一点呢?答案就是使用tabindex属性。
tabindex属性设置按下tab键时的响应顺序。它的值是一个数字,越小的数字响应顺序越靠前,最小为1。在未设置tabindex属性时,tab键将从页面的第一个链接或者表单项开始切换(这里要说明一个情况,IE浏览器中第一次按下tab键时,选中的是地址栏)。
利用tabindex的这一特性,我们就可以给表单里的各项添加相应的属性。比如一个登录表单,第一个表单项是“用户名”,我们就可以在这一项上添加tabindex=”1”,并依次为后面的项赋值。这样,在访问这个页面时,按下tab键后光标就停在“用户名”的文本输入框上,从而完全实现了无鼠标参与的表单填写。
此外,在某些网站的注册页面,部分表单项后面会跟着一个链接或者按钮,用来对当前项的需要输入的内容进行解释或验证。在未添加tabindex属性的页面,tab键会经过这些链接或按钮。熟练的tab键用户往往会在这上面犯错误——他们以为光标已经进入下一个文本框了,可实际却停在一个链接上。最糟的情况时,他们就完全找不到光标了,从而需要重新拿起鼠标来点选下一项。使用tabindex属性就可以很好的避免这一点。为每个表单项都添加tabindex,tab键就不会进入非填写区域了。
不过我很遗憾的发现,在我访问过的网站中,没有一家使用tabindex属性。

最后,我提供一段代码供您测试tabindex属性的作用。

<form id=”form” name=”form” method=”post” action=””>
<p><a href=”www.naks.cn”>blueven.naks.cn</a> 布鲁文的蓝色奇想</p>
<p>第二项:
<label>
<input type=”text” tabindex=”2″ name=”textfield” />
</label>
</p>
<p>第一项:
<label>
<input type=”text” tabindex=”1″ name=”textfield2″ />
</label>
</p>
<p>第三项:
<label>
<input type=”text” tabindex=”3″ name=”textfield3″ />
</label>
</p>
</form>

由百度不支持JavaScript想到

最糟糕的情况莫过于Web设计师、浏览器制造商、Web标准组织和搜索引擎公司互相死缠烂打。这四部分中的任何一个如果不肯改进,不肯接受变革,就会导致整个Web技术领域的停滞不前。
还好,我们的Web设计师们是一群积极进取,乐于学习新事物的人才。Web标准组织更是不遗余力的展示和推销更好的新点子。而由于近年来开源浏览器FireFox的强势加入,浏览器大战也终于停止,主流浏览器制造商都在积极的适应Web标准。
不错,我就是在暗示问题出在搜索引擎上。
由于某种近乎于迷信的气氛,Web设计师们总是在尽力讨好搜索引擎,用尽各种手段——甚至做弊——也要把自己网站的搜索引擎排名提高。也正是由于设计师们的这种态度,搜索引擎们自我感觉良好,并以霸王般的态度藐视Web标准的革新。
比如我在“搜狐博客们,快快搬家吧”一文中提到的搜索引擎不支持JavaScript问题。正是由于搜索引擎对JS的藐视,使得理智的设计师们在使用JS时总是慎之又慎,生怕网站上某个有趣的新功能“触怒”了搜索引擎。那么在文章开头提到的“四个部分”中,已经有两个部分在JS的问题上放慢甚至停住了脚步,那么关于JS的推广,必定会受阻。
搜索引擎不支持JS,这当中确实存在技术问题。处理动态脚本的难度一定比处理静态的html/xhtml标记大许多。但技术是其次,最主要的是态度问题。搜索引擎在面对新技术时总是意无意的显出力不从心。比如老生常谈的动态页面问题,在动态页面流行了那么多年后,大家还是知道搜索引擎对动态页面的支持不好。为了迎合搜索引擎的胃口,人们不得不开发出了静态和伪静态页面技术。这使得问题复杂化,增加了Web开发和运营的成本。
搜索引擎公司应当转变“老大”态度,积极迎合Web技术的革新,而不是让设计师们去刻意讨好搜索引擎,这样Web技术才能健康的发展下去。而在这一点上,Google就走在了前列。它可能是国内中文搜索引擎中目前唯一一家支持JS的(甚至可能在全世界也只有Google一家支持)。也许正是因为Google这种积极迎合变革的态度,才使得它成为了世界第一。

PHP防范SQL注入的方法

很简单,两个办法:在php.ini中打开magic_qutoe_gpc;或者用mysql_real_escape_string()对即将进入数据库的字符串进行处理。
原来之前面试我的公司如此SB!

搜狐博客们,快快搬家吧!

难道你们没有发现,不管自己博客有多么高的访问量,当你在百度搜索自己的博客时,最多只会有一个条目吗?
原因何在?嗯,最近看了些关于JaveScript的书,就让我现学现卖,分析一下吧。
其实很简单,搜狐博客没有预留退路——把几乎所有信息都用JavaScript处理并显示。
这样作,对于普通用户来说不会出问题,因为很少有人会在浏览器中禁用JavaScript功能,或者使用对JavaScript支持不好的浏览器。
但是绝大部分搜索引擎的搜索蜘蛛都不支持JaveScript。当这些搜索蜘蛛查看网页时,看不到任何依托JavaScript生成的信息。我们不妨尝试打开一个搜狐博客的主页,并把页面保存到本地查看。你会发现所有区块下面的文字都是“数据加载中…”。而这样一个页面,就是搜索蜘蛛看到的页面。仅靠这个页面,搜索蜘蛛完全不可能知道网站的详细结构和内容,因此也无法收录该页以外的页面。
顺带再提一点,因为上述原因,请谨慎处理与搜狐博客的链接交换行为——对于搜索引擎来说,这个交换绝对是单向的。
希望这篇文章能给关注自己博客的搜索引擎排名的搜狐博友们解惑,同时建议这些朋友尽快搬家。
目前,只有最聪明的Google能够收录JavaScript生成的信息。

BSP闹笑话

最近写Babel Core的时候,几乎看遍了国内主流bsp的RSS Feed。在这过程中,除了加深了对rss的了解外,还看到了bsp们在rss这个不太被“人”注意的地方闹除了不少笑话。
问题主要出现在<pubDate></pubDate>标记上。且不说各家bsp时间格式千奇百怪,有那么几家作得实在让人啼笑皆非。下面列出最搞笑的前三名。

第三名:MSN Live Space
笑点:<pubDate>日, 29 四月 2007 08:16:13 GMT</pubDate>
rss主要是给计算机看的。计算机最会认英文,认中文的话,说不定还要抱个“字典”查。微软的这个“本土化”行为实在有点画蛇添足。

第二名:Blogcn
笑点:<pubDate>null</pubDate>
竟然是null啊!为了确定不是个别情况,我查了好几个博客的,都是null啊!有点“占着茅坑不拉屎”的感觉。

第一名:天涯博客
笑点:<pubDate>2007-5-8星期二(Tuesday)晴</pubDate>
好吧,这个实在太绝了!只给了日期,没给时间;写了个星期二,怕计算机看不懂中文,又打上括号写了个Tuesday;最后,还有个“晴”。天涯太有才了,把rss当成小孩子的日记写。