Web开发人员最常犯的10个错误(开发人员教程)

本文概述

  • 常见错误1:输入验证不完整
  • 常见错误2:未经适当授权的身份验证
  • 常见错误3:尚未准备好扩展
  • 常见错误4:错误或缺少SEO
  • 常见错误5:请求处理程序中的时间或处理器消耗操作
  • 常见错误6:未优化带宽使用
  • 常见错误7:不能针对不同的屏幕尺寸进行开发
  • 常见错误8:跨浏览器不兼容
  • 常见错误9:不计划可移植性
  • 常见错误10:RESTful反模式
  • 本文总结
自1990年创建” 万维网” 一词以来, Web应用程序的开发已从提供静态HTML页面发展为完全动态, 复杂的业务应用程序。
如今, 我们拥有成千上万的数字和印刷资源, 它们提供了有关开发各种不同Web应用程序的逐步说明。开发环境足够” 聪明” , 可以捕获并修复许多早期开发人员经常遇到的错误。甚至还有许多不同的开发平台, 可以轻松地将简单的静态HTML页面变成高度交互的应用程序。
所有这些开发模式, 实践和平台都具有共同点, 并且都容易因Web应用程序的本质而引起类似的Web开发问题。
这些Web开发技巧的目的是阐明在Web开发过程的不同阶段犯下的一些常见错误, 并帮助你成为更好的开发人员。我触及了几乎所有Web开发人员都通用的一些常规主题, 例如验证, 安全性, 可伸缩性和SEO。当然, 你应该不受本指南中描述的特定示例的约束, 因为列出这些示例只是为了使你了解可能遇到的潜在问题。
常见错误1:输入验证不完整在客户端和服务器端验证用户输入只是必须要做的!我们都知道” 不信任用户输入” 的明智建议, 但是, 由于验证而产生的错误经常发生。
此错误最常见的后果之一是SQL注入, 它每年都在OWASP排名前10位。
请记住, 大多数前端开发框架都提供了开箱即用的验证规则, 这些规则使用起来非常简单。此外, 大多数主要的后端开发平台都使用简单的注释来确保提交的数据符合预期的规则。实施验证可能很耗时, 但是它应该成为标准编码实践的一部分, 并且永远不要搁置。
常见错误2:未经适当授权的身份验证在继续之前, 请确保我们在这两个术语上保持一致。如10个最常见的Web安全漏洞中所述:
身份验证:验证一个人是否是(或至少看起来是)特定用户, 因为他/她已正确提供了他们的安全凭证(密码, 安全问题的答案, 指纹扫描等)。
授权:确认特定用户有权访问特定资源或被授予执行特定操作的权限。
换句话说, 认证就是知道一个实体是谁, 而授权就是一个给定的实体可以做什么。
让我用一个例子演示这个问题:
考虑你的浏览器将当前记录的用户信息保存在类似于以下内容的对象中:
{ username:'elvis', role:'singer', token:'123456789' }

更改密码时, 你的应用程序进行POST:
POST /changepassword/:username/:newpassword

在/ changepassword方法中, 验证用户已登录并且令牌尚未过期。然后, 你可以根据:username参数找到用户个人资料, 并更改用户密码。
因此, 你验证了用户是否已正确登录, 然后执行了他的请求, 从而更改了他的密码。流程似乎还好吧?不幸的是, 答案是否定的!
此时, 重要的是要验证执行操作的用户和更改密码的用户是否相同。可以篡改浏览器中存储的任何信息, 并且任何高级用户都可以轻松地将用户名:” elvis” 更新为用户名:” Administrator” , 而无需使用内置浏览器工具。
因此, 在这种情况下, 我们只负责身份验证, 以确保用户提供了安全凭证。我们甚至可以添加验证/ changepassword方法只能由Authenticated用户执行。但是, 这仍然不足以保护你的用户免遭恶意尝试。
你需要确保在/ changepassword方法中验证实际的请求者和请求的内容, 并对请求进行适当的授权, 以确保用户只能更改其数据。
认证和授权是同一枚硬币的两个方面。切勿分开对待它们。
常见错误3:尚未准备好扩展在当今高速发展的世界中, 启动加速器并立即在全球范围内传播出色的创意, 因此, 将MVP(最小可行产品)尽快推向市场是许多公司的共同目标。
但是, 这种持续的时间压力甚至导致优秀的Web开发团队经常忽略某些问题。伸缩通常是团队理所当然的事情之一。 MVP概念很棒, 但是推得太远了, 就会遇到严重的问题。不幸的是, 仅选择可伸缩数据库和Web服务器并在独立的可伸缩服务器上分离所有应用程序层是不够的。如果你希望避免以后再重写应用程序的重要部分, 则需要考虑许多细节, 这成为一个主要的Web开发问题。
例如, 假设你选择将用户上传的个人资料图片直接存储在Web服务器上。这是一个非常有效的解决方案-应用程序可以快速访问文件, 每个开发平台都可以使用文件处理方法, 甚至可以将这些图像用作静态内容, 这意味着应用程序的负载最小。
但是, 当你的应用程序增长并且你需要在负载均衡器后面使用两个或多个Web服务器时会发生什么?即使你很好地扩展了数据库存储, 会话状态服务器和Web服务器, 由于诸如配置文件映像之类的简单事情, 你的应用程序可伸缩性仍然失败。因此, 你需要实施某种类型的文件同步服务(这将有一个延迟, 并会导致404错误临时发生)或另一种变通办法, 以确保文件分散在你的Web服务器上。
首先, 你需要做的就是避免使用共享文件存储位置, 数据库或任何其他远程存储解决方案。要实现所有这些, 可能会花费几个额外的工作时间, 但这将是值得的。
常见错误4:错误或缺少SEO网站上错误或缺少SEO最佳做法的根本原因是误导了” SEO专家” 。许多网络开发人员认为他们对SEO足够了解, 并且它并不是特别复杂, 但这并不是事实。精通SEO需要花费大量时间来研究最佳做法以及有关Google, Bing和Yahoo如何索引网络的不断变化的规则。除非你不断进行实验并进行准确的跟踪和分析, 否则你不是SEO专家, 也不应声称自己是SEO专家。
此外, SEO常常由于最终完成的某些活动而被推迟。 Web开发问题付出了高昂的代价。 SEO不仅与设置良好的内容, 标签, 关键字, 元数据, 图像alt标签, 站点地图等有关。它还包括消除重复的内容, 具有可爬网的站点体系结构, 有效的加载时间, 智能反向链接等。
【Web开发人员最常犯的10个错误(开发人员教程)】像可伸缩性一样, 你应该从开始构建Web应用程序开始就考虑SEO, 否则你可能会发现完成SEO实施项目意味着重写整个系统。
常见错误5:请求处理程序中的时间或处理器消耗操作此错误的最佳示例之一是根据用户操作发送电子邮件。开发人员通常认为解决方案是进行SMTP调用并直接从用户请求处理程序发送消息。
假设你创建了一个在线书店, 并且希望每天从几百个订单开始。作为订单接收过程的一部分, 每次用户发布订单时, 你都会发送确认电子邮件。最初这将毫无问题, 但是当你扩展系统时, 突然收到成千上万个发送确认电子邮件的请求会怎样?你可能会收到SMTP连接超时, 超出配额, 或者你的应用程序响应时间大大缩短, 因为它现在正在处理电子邮件而不是用户。
在尽快释放HTTP请求时, 任何耗时或占用处理器的操作都应由外部进程处理。在这种情况下, 你应该具有一个外部邮件服务, 该服务可以提取订单并发送通知。
常见错误6:未优化带宽使用大多数开发和测试都在本地网络环境中进行。因此, 当你下载5张背景图像(每张3MB或更多)时, 你可能不会在开发环境中发现1Gbit连接速度存在问题。但是, 当你的用户开始通过智能手机通过3G连接加载15MB主页时, 你应该为投诉和问题列表做好准备。
优化带宽使用可以极大地提高性能, 要获得这种提高, 你可能只需要几个技巧。默认情况下, 许多优秀的网络开发人员很少做以下事情:
  1. 缩小所有JavaScript
  2. 缩小所有CSS
  3. 服务器端HTTP压缩
  4. 优化图像尺寸和分辨率
常见错误7:不能针对不同的屏幕尺寸进行开发在过去的几年中, 响应式设计一直是一个大话题。具有不同屏幕分辨率的智能手机的扩展带来了许多访问在线内容的新方法, 同时还带来了许多Web开发问题。智能手机和平板电脑带来的网站访问量每天都在增长, 并且这种趋势正在加速。
为了确保无缝导航和对网站内容的访问, 必须使用户能够从所有类型的设备访问它。
有许多用于构建响应式Web应用程序的模式和实践。每个开发平台都有自己的提示和技巧, 但是有些框架与平台无关。最受欢迎的可能是Twitter Bootstrap。它是每个主要开发平台都采用的开源和免费HTML, CSS和JavaScript框架。在构建应用程序时只需遵循Bootstrap模式和实践, 你将获得响应迅速的Web应用程序, 而不会遇到任何麻烦。
常见错误8:跨浏览器不兼容在大多数情况下, 开发过程会承受沉重的时间压力。每个应用程序都需要尽快发布, 即使是优秀的Web开发人员也常常专注于通过设计交付功能。尽管大多数开发人员都安装了Chrome, Firefox, IE, 但90%的时间他们只使用其中的一种。在开发过程中通常使用一种浏览器, 就像应用程序接近完成一样, 你将开始在其他浏览器中对其进行测试。这是完全合理的-假设你有很多时间来测试和修复此阶段出现的问题。
但是, 有一些Web开发技巧可以在你的应用程序进入跨浏览器测试阶段时为你节省大量时间:
  1. 在开发过程中, 你无需在所有浏览器中进行测试;这既费时又无效。但是, 这并不意味着你不能经常切换浏览器。每两天使用一个不同的浏览器, 你至少会在开发初期就认识到重大问题。
  2. 请谨慎使用统计信息来证明不支持浏览器。有许多组织在采用新软件或升级方面进展缓慢。在那儿工作的成千上万的用户可能仍需要访问你的应用程序, 由于内部安全和业务策略的原因, 他们无法安装最新的免费浏览器。
  3. 避免使用浏览器特定的代码。在大多数情况下, 存在一个与跨浏览器兼容的优雅解决方案。
常见错误9:不计划可移植性假设是一切问题的根源!说到可移植性, 这句话比以往任何时候都更真实。你有多少次看到Web开发中的问题, 例如硬编码的文件路径, 数据库连接字符串或假定某个库在服务器上可用的假设?假设生产环境将与你的本地开发计算机相匹配是完全错误的。
理想的应用程序设置应免维护:
  1. 确保你的应用程序可以在负载均衡的多服务器环境中扩展和运行。
  2. 允许简单明了的配置-可能在单个配置文件中。
  3. Web服务器配置与预期不符时处理异常。
常见错误10:RESTful反模式RESTful API已在Web开发中占据一席之地, 并且一直存在。几乎每个Web应用程序都实现了某种REST服务, 无论是内部使用还是与外部系统集成。但是我们仍然看到破坏的RESTful模式和服务不符合预期的做法。
编写RESTful API时犯的两个最常见的错误是:
使用错误的HTTP动词。例如, 使用GET写入数据。 HTTP GET被设计为幂等且安全的, 这意味着无论你在同一资源上调用GET多少次, 响应都应该始终相同, 并且应用程序状态不会发生任何变化。
没有发送正确的HTTP状态代码。此错误的最佳示例是发送带有响应代码200的错误消息。
HTTP 200 OK { message:'there was an error' }

仅当请求未产生错误时, 才应发送HTTP 200 OK。如果发生错误, 则应发送400、401、500或其他适合已发生错误的状态代码。
可以在此处找到标准HTTP状态代码的详细概述。
本文总结Web开发是一个极为广泛的术语, 可以合法地涵盖网站, Web服务或复杂Web应用程序的开发。
该Web开发指南的主要内容是提醒你, 应该始终谨慎对待身份验证和授权, 可伸缩性计划, 并且不要草率地承担任何责任-或准备好处理大量Web开发问题!

    推荐阅读