在StackExchange上有人问了这样一个问题:What should every programmer know about web development?(关于Web开发,什么是所有程序员需要知道的?)里面给出的答案非常不错,所以,我翻译转载过来。 顺便说一下,StackExchange真是非常好,大家可以对同一个答案做贡献和修订,看看这个问题的修订过程你就知道了——专业的问答网站应该怎么去做。这就是我在这篇文章中也说过真正的用户体验是什么样的。
好了,下面是正文(我对原文做了一些批注,也许不对或有误导,请大家指正)
下面的这些东西可能对于大多数人并不陌生,但是可能会有些东西你以前并没有看过,或是没有完全搞懂,甚至都没有听说过。
接口和用户体验
小心浏览器的实现标准上的不一致,确信让你的网站能够适当地跨浏览器。至少,你的网站需要测试一下下面的浏览器:
最新的 Gecko 引擎 (Firefox),
一个 Webkit 引擎 (Safari, Chrome, 或是其它的移动设备上的浏览器)
IE 浏览器 (测试IE的兼容性你可以使用微软IE的 Application Compatibility VPC Images)
Opera 浏览器。
最后,你可以使用一下这个工具 来看看你的网页在不同的浏览器下是怎么被显示出来的。
多考虑一下人们是怎么来访问你的网站而不是那些主流的浏览器:手机,读屏软件和搜索引擎,例如:一些Accessibility的东西: WAI 和 Section508, 移动设备开发:MobiForge.
部署Staging:怎么部署网站的更新而不会影响用户的访问。 Ed Lucas的答案 可以让你了解一些。
千万不要直接给用户显示不友好的错误信息。
千万不要把用户的邮件地址以明文显示出来,这样会被爬虫爬走并被让用户的邮箱被垃圾邮件搞死。
为用户的链接加上 rel="nofollow" 的属性以 避免垃圾网站的干扰。(nofollow是HTML的一个属性,用于通知搜索引擎“这个链接所指向的网页非我所能控制,对其内容不予置评”,或者简单地说,该链接不是对目标网站或网页的“投票”,这样搜索引擎不会再访问这个链接。这个是用来减少一些特定垃圾页面对原网站的影响,从而可以改善搜索结果的质量,并且防止垃圾链接的蔓延。)
为网站建立一些的限制 - 这个属于安全性的范畴。(比如你在Google注册邮箱时,你一口气注册超过两个以上的邮箱,gmail要求给你发短信或是给你打电话认证,比如Discuz论坛的会限制你发贴或是搜索的间隔时间等等,更多的网站会用CAPTCHA来确认是人为的操作。 这些限制都是为了防止垃圾和恶意攻击)
学习如何做 Progressive Enhancement.基础的内容和功能应该可以被所有的浏览器存取,2)页面布局的应该使用外部的CSS链接,3)Javascript也应该是外部链接还应该是 unobtrusive 的,4)应该让用户可以设置他们的偏好)
如果POST成功,要在POST方法后重定向网址,这样可以阻止用户通过刷新页面重复提交。
严重关注Accessibility。因为这是法律上的需求。 WAI-ARIA 为这方面的事提供很不错的资源.
安全
在网上有很多关于安全的文章,但是 OWASP 开发指导 涵盖了几乎所有关于Web站点安全的东西。是一个开放的非营利性组织,目前全球有130个分会近万名会员,其主要目标是研议协助解决Web软体安全之标准、工具与技术文件,长期 致力于协助政府或企业了解并改善网页应用程式与网页服务的安全性。OWASP被视为Web应用安全领域的权威参考。2009年下列发布的美国国家和国际立法、标准、准则、委员会和行业实务守则参考引用了OWASP。美国联邦贸易委员会(FTC)强烈建议所有企业需遵循OWASP十大WEB弱点防护守则)
了解什么是 SQL 注入攻击 并知道怎么阻止这种攻击。
永远不要相信用户的输入(包括Cookies,因为那也是用户的输入)
对用户的口令进行Hash,并使用salt,以防止Rainbow 攻击(Hash算法可用MD5或SHA1等,对口令使用salt的意思是,user 在设定密码时,system 产生另外一个random string(salt)。在datbase 存的是与salt + passwd 产的md5sum 及salt。 当要验证密码时就把user 输入的string 加上使用者的salt,产生md5sum 来比对。 理论上用salt 可以大幅度让密码更难破解,相同的密码除非刚好salt 相同,最后存在database 上的内容是不一样的。google一下md5+salt你可以看到很多文章。关于Rainbow 攻击,其意思是很像密码字典表,但不同的是,Rainbow Table存的是已经被Hash过的密码了,而且其查找密码的速度更快,这样可以让攻击非常快)。使用慢一点的Hash算法来保存口令,如 bcrypt (被时间检证过了) 或是 scrypt (更强,但是也更新一些) (1, 2)。你可以阅读一下 How To Safely Store A Password。
不要试图自己去发明或创造一个自己的fancy的认证系统,你可能会忽略到一些不容易让你查觉的东西而导致你的站点被hack了。
了解 处理信用卡的一些规则 . (这里也有一个问题你可以查看一下)
使用 SSL/HTTPS 来加密传输登录页面或是任可有敏感信息的页面,比如信用卡号等。
知道如何对付session 劫持。
避免 跨站伪造请求攻击 cross site request forgeries (XSRF).
保持你的系统里的所有软件更新到最新的patch。
确保你的数据库连接是安全的。
确保你能了解最新的攻击技术,以及你系统的脆弱处。
请读一下 The Google Browser Security Handbook.
请读一下 The Web Application Hacker’s Handbook.