web开发者在发布你的作品前需要考虑的技术细节

这篇文章个人觉得很受用,故仔细翻译了一下,有些地方可能翻译的不好,请见谅! 翻译后发现貌似已经有人翻译过,但是翻译的水平就有点。。。。。那篇文章中不仅忽略了知识点,并且出现了明显的语义和语法错误,有一定的误导作用,所以请务必重新阅读老高的翻译。文章中容易出错的地方老高已经注释(在文章中以【】标出)。 如需转载,请注明出处! web开发者在发布你的作品前需要考虑的技术细节 What technical details should a programmer of a web application consider before making the site public! 原文地址: 来自stackexchange.com quora的回答 界面和用户体验 要意识到浏览器的实现标准不一,请确保你的网站在主流浏览器中的正常展现。至少要针对一个最新的Gecko引擎(火狐)的浏览器、一个基于Webkit引擎(Safari或者其他移动端)的浏览器、Chrome、你想要支持的IE浏览器(可以借助IE应用程序兼容性VPC镜像)和Opera浏览器。同时需要考虑到在不同的操作系统下浏览器是如何渲染你的网站。 需要考虑来自其他浏览器的用户如何使用你的网站:智能手机、屏幕朗读器和搜索引擎,举个例子。–一些易用性信息:网页易读性倡议(WAI)和网站508规范(Section508),移动站开发:移动互联网开发者论坛(MobiForge)。 构架:如果在不影响用户的情况下部署升级。有一个或者多个用来更改架构、代码或者内容更新的可用测试或运行环境,确保他们部署的可控性,以防止造成破坏。有一个自动化部署方案,用来提交更改到生产环境。最优的解决方案是结合使用一个版本控制系统(CVS, Subversion等【译者注:为啥没GIT】)或一个自动构造机制(Ant,NAnt等)。 不要直接给用户展现不友好的错误信息。 不要用纯文本的形式呈现用户的Email,否则他们会被垃圾邮件骚扰。 给用户生成的链接加上rel="nofollow"属性,以避免SEO作弊。 为你的站点建立合理的限制机制,这一条同时属于安全细则。 理解什么是渐进增强(progressive enhancement)【译者注:与之相对的是优雅降级(graceful degradation)】。 如果一个请求提交成功,请重定向至其他地方,防止用户的重复提交。 不要忘了考虑无障碍阅读,这对网站的优化来讲是一个好主意,而且有些情况下他是法律强制必须有的。 无障碍网页应用(WAI-ARIA)和Web内容无障碍指南2(WCAG 2)在这方面可以帮到你! 不要让用户思考该如何操作 安全 OWASP开发入门可能会让你花一些时间掌握,但是他涵盖了网站开发安全的方方面面。 了解注入,尤其是SQL注入,并知道如何防御注入。 永远不要相信用户的输入,还有请求中的所有信息(包括cookie和隐藏域)。 给你的密码加点盐后在使用哈希,并针对不同行使用不同的盐以防止彩虹攻击。使用慢速【短?】散列算法,如bcrypt(经过时间考验)或者scrypt(更强、比较新)(1, 2) ,针对如何保存密码请参考(如何保存你的密码)。美国国家标准与技术研究院表示支持使用PBKDF2 算法来加密,联邦信息处理标准在dotnet开发中也支持PBKDF2(更多信息)。避免直接使用MD5和SHA族算法来保存密码。 不要尝试使用自创的自以为NB的认证系统。因为你很容易在细节和无法测试的地方犯错误,也许被黑了以后你才会后知后觉。 了解信用卡的处理规则。(详见这个问题) 为登陆页面和任何需要输入敏感信息的页面使用SSL/HTTPS(如信用卡信息)。 避免跨站脚本攻击(XSS)。 避免跨站请求伪造(CSRF)。 避免点击劫持。 使你的系统更新到最新的补丁。 确保你的数据库连接信息是安全的。 时刻注意最新的攻击技术和影响你的平台的漏洞。 阅读谷歌浏览器安全手册。 阅读网络产品黑客手册。 考虑权限最小化原则。试着让你的应用服务器以非ROOT权限运行(以tomcat为例)。 性能 必要时使用缓存,理解并使用HTTP缓存技术和HTML5的Manifest技术。 图片优化 - 不要使用一个20KB大小的的图片最为重复背景。 学习如何使用gzip压缩内容。 合并/链接多个样式表或多个脚本文件以减少浏览器的请求数,并且使用gzip压缩文件中重复的内容。 看一看雅虎高性能站点,有很多不错的点子,包括提高前端性能和他们的YSlow工具(需求使用Firefox、Safira、Chrome、或Opera浏览器)。同时,Google page speed(使用浏览器插件)也是一个不错的性能调校工具,他同时也会优化你的图片。 针对小并且相关的图片使用CSS image sprite技术。 访问量大的站点需要考虑将不用内容分至不同的域名下。 静态内容(如图片、css、js脚本还有不需要cookie的普通内容)应该被分配到一个不使用cookie的域名下,因为一个域名下的所有cookie和子域下的cookie将会被包含在所有对应的域名下。一个好的主意是使用CND加速,但是考虑到CND可能会挂,到时候本地的拷贝也会提供服务。 最小化一个浏览器需要渲染一个页面所需要的请求数。 利用工具Google Closure Compiler最小化你的js文件,还有其他的最小化工具。 确保有一个favicon....

August 17, 2014 · 1 min · Me

数据库持久连接

搜PHP长链接把这个搜出来了,2006年的帖子比较久远了,希望对你有帮助! 转自http://bbs.phpchina.com/forum.php?mod=viewthread&tid=4577&page=1 中forest的回帖: 永久的数据库连接是指在脚本结束运行时不关闭的连接。当收到一个永久连接的请求时。PHP 将检查是否已经存在一个(前面已经开启的)相同的永久连接。如果存在,将直接使用这个连接;如果不存在,则建立一个新的连接。所谓“相同”的连接是指用相同的用户名和密码到相同主机的连接。 对 web 服务器的工作和分布负载没有完全理解的读者可能会错误地理解永久连接的作用。特别的,永久连接不会在相同的连接上提供建立“用户会话”的能力,也不提供有效建立事务的能力。实际上,从严格意义上来讲,永久连接不会提供任何非永久连接无法提供的特殊功能。 为什么? 这和 web 服务器工作的方式有关。web 服务器可以用三种方法来利用 PHP 生成 web 页面。 第一种方法是将 PHP 用作一个“外壳”。以这种方法运行,PHP 会为向 web 服务器提出的每个 PHP 页面请求生成并结束一个 PHP 解释器线程。由于该线程会随每个请求的结束而结束,因此任何在这个线程中利用的任何资源(例如指向 SQL 数据库服务器的连接)都会随线程的结束而关闭。在这种情况下,使用永久连接不会获得任何地改变――因为它们根本不是永久的。 第二,也是最常用的方法,是把 PHP 用作多进程 web 服务器的一个模块,这种方法目前只适用于 Apache。对于一个多进程的服务器,其典型特征是有一个父进程和一组子进程协调运行,其中实际生成 web 页面的是子进程。每当客户端向父进程提出请求时,该请求会被传递给还没有被其它的客户端请求占用的子进程。这也就是说当相同的客户端第二次向服务端提出请求时,它将有可能被一个不同的子进程来处理。在开启了一个永久连接后,所有请求 SQL 服务的后继页面都能够重新使用这个已经建立的 SQL Server 连接。 最后一种方法是将 PHP 用作多线程 web 服务器的一个插件。目前 PHP 4 已经支持 ISAPI、WSAPI 和 NSAPI(在 Windows 环境下),这些使得 PHP 可以被用作诸如 Netscape FastTrack (iPlanet)、Microsoft’s Internet Information Server (IIS) 和 O’Reilly’s WebSite Pro 等多线程 web 服务器的插件。永久连接的行为和前面所描述的多过程模型在本质上是相同的。注意 PHP 3 不支持 SAPI。...

May 16, 2014 · 1 min · Me

网站搭建手记

简单的记录一下搭建自己的博客需要做的事情! 确定主题 一个网站的主题很重要,要不然你会无从下手,所以千万不要像我这样开一个这么无聊的blog。为什么说此步骤最难,就是因为点子是最重要的,只要主题(目标)明确,那么建立(实现)它就是易如反掌了。 选域名 域名是什么?其实就是一个网站的艺名而已。人家的网站叫“234.156.78.90”,你的叫“ccav.com”,那么你说那个更容易出名呢?所以,好的域名可能让你的网站迅速火起来。举个小栗子,以前的京东商城的域名是360buy.com,不懂英语的人当然不好记了,现在改名jd.com,既好记又提升了企业形象,何乐而不为呢?(估计这个域名京东花了不少钱)。不建议大家购买com以外的域名,尤其是cn结尾的,至于为什么大家可以自己研究。域名选好了后,就购买空间了。 虚拟主机(网站空间) 光是有了像phpgao.com这样的域名是不够的,因为你需要把你的文章放到互联网上供大家访问,所以你需要一个专用服务器,当然自己搭建服务器也是可以的,但是如果是个规模不大的网站老高建议还是租用吧,我的空间就是淘宝上买的,28半年,香港主机,速度还行。(为什么是香港空间?免备案呗!) 域名与空间的绑定 GOOD!既然你已经有了域名和空间,是时候将它们相互关联了。这一步比较关键!为了让大家更好的理解这一节。老高来举个大栗子,某一天老高要孤身一人拜访位从未谋面的远房亲戚,远程通话后确定目的地,坐飞机2小时(想的好美啊),下飞机后找那个举着牌子的人,我才能顺利见到那位亲戚。也就是说,我从出发到坐飞机,到达后根据牌子辨认身份这一系列的动作如果有一个失误,我的此次出行就是失败的,之后我只能沮丧的回家了。。。反应到现实就是:和我通话的那个人就是域名,他告诉我他在哪个IP等我,等我通过IP到站后,找那个举着牌子的人,这样就完成了一次“见面”。简单的说空间有个IP,你的域名必须解析到那个IP才行,当然不要忘了空间需要和你的域名绑定。 最后的工作 如果域名没有备案的话,那么你的空间应该和我一样不在内地吧。不过不要紧,能访问就行。想要搭建WP这类博客,你的空间还需要一个不是太小的MYSQL空间,也就是传说中的数据库。我的空间是200M+200M型,也就是说我的空间能放小于200M的MP3文件并且在数据库能够存放200M的数据。其实这么点空间建一个站已经很富裕了。(注:国外的空间不是很稳定,一定要定期备份!)

May 10, 2014 · 1 min · Me

网站无法选择和复制文字

有些网站真是可恶,把右键屏蔽了不给复制,这样还不行(因为可以使用快捷键CTRL+C复制) 他们竟然不让我们选择文字。。。这样下来我们既不能复制,连源代码都不能看了。是可忍孰不可忍,既然这样,那我就不客气了! 找到病根是关键 原来是JS捣的鬼 纯html是无法实现屏蔽右键等功能的,所以很简单就能想到是js的问题,那么我们就找找到底是那些代码段使得我们无法使用邮件功能呢? 既然右键被禁止了,那我们如何才能看到网页的源代码呢? 其实很简单,PHP@老高建议你使用chrome浏览器打开你想要破解的网站,使用快捷键CTRL+U即可轻易查看网页的源代码!怎么样,很简单吧? 好了既然我们已经找到源代码,那就开始找那个害人的代码段吧! 代码一 这个是比较难找的代码,一般隐藏在网页的头部或者藏在某些引用的js文件中 <SCRIPT language=javascript type=text/javascript> <!-- document.oncontextmenu=new Function('event.returnValue=false;');//屏蔽右键 document.onselectstart=new Function('event.returnValue=false;');//屏蔽选择 --> </SCRIPT> 代码二 这个比较容易找到,直接找到标签,之后就是此句,与代码一异曲同工 <body oncontextmenu="self.event.returnValue=false" onselectstart="return false"> 解决方法 IE浏览器 使用IE的童鞋可以试试在浏览器的地址栏输入 javascript:alert(document.oncontextmenu=document.onselectstart="OK") 或者 javascript:alert(document.body.oncontextmenu=document.body.onselectstart="OK") 之后弹出对话框,点击确认即可!现在点击右键或者选择文字试试,是不是已经被破解了? 请注意!该方法可能已经失效,因为新一代浏览器对安全性有了很大的提高,所以在地址栏输入脚本可能会被禁止! 接下来就是将他删除掉即可: 在代码上点击右键:选择第二项Edit Attribute,将其属性删除,结果代码变成这样: 不用怀疑了,刚才限制的功能已经恢复啦! 其他浏览器 以chrome为例 首先,在被屏蔽的网站上点击F12,出现了如下图所示代码(注:老高@PHPer使用的是chrome v30,不同版本的界面留有不同) 当然,您的火眼金睛可能立即发现了蓝色标记的一行代码 <body oncontextmenu=”self.event.returnValue=false” onselectstart=”return false”> 接下来就是将他删除掉即可: 在代码上点击右键:选择第二项Edit Attribute,将其属性删除,不用怀疑了,限制的功能已经恢复啦! 终极方法 在浏览器中将以下代码存为书签,名为解锁,在被禁网址中点击一下解锁,即可解开~ javascript:(function() { function R(a){ona = "on"+a; if(window.addEventListener) window.addEventListener(a, function (e) { for(var n=e.originalTarget; n; n=n....

March 7, 2014 · 1 min · Me