ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

哈佛 CS50 中文官方笔记(十四)

哈佛 CS50 中文官方笔记(十四) 有一些情况下作为开发者你必须决定你愿意泄露多少信息。例如许多网站都有一个看起来像这样的忘记密码页面https://github.com/OpenDocCN/cs-notes-pt3-zh/raw/master/docs/hav-cs50/img/04cad4cb2f2a7bc1ccbc94f0a4490d0c.png作为一名开发者你可能在提交后想要包含成功或错误信息https://github.com/OpenDocCN/cs-notes-pt3-zh/raw/master/docs/hav-cs50/img/3ff2e0d3eac7b3b59381177221dd8de8.pnghttps://github.com/OpenDocCN/cs-notes-pt3-zh/raw/master/docs/hav-cs50/img/9c650618924f9903e438873d3246b50c.png但请注意通过输入电子邮件任何人都可以确定谁在该网站上注册了电子邮件。在一个人是否使用该网站无关紧要的情况下比如 Facebook这可能完全没问题但如果你是某个网站的成员可能会让你处于危险之中比如虐待受害者的在线支持小组这就会非常鲁莽。数据可能泄露的另一种方式是在响应返回所需的时间。拒绝一个电子邮件地址无效的人可能比拒绝一个电子邮件地址正确但密码错误的人更快。如我们在课程中之前讨论过的每次我们在代码中使用直接的 SQL 查询时都必须警惕 SQL 注入攻击。APIs我们经常将 JavaScript 与 API 结合使用来构建单页应用程序。当我们自己构建 API 时我们可以使用一些方法来保持我们的 API 安全API 密钥只处理你提供给 API 客户端的密钥的请求。速率限制限制任何用户在给定时间段内可以发出的请求数量。这有助于防止拒绝服务DoS攻击恶意用户通过向你的 API 发出大量调用使其崩溃。路由认证有许多情况下我们不希望让每个人都访问我们的所有数据因此我们可以使用路由认证来确保只有特定的用户可以看到特定的数据。环境变量正如我们想要避免以明文形式存储密码一样我们也会想要避免在我们的源代码中包含 API 密钥。避免这种情况的一种常见方法就是使用环境变量或者存储在你的操作系统或服务器环境中的变量。然后而不是在我们的源代码中包含一串文本我们可以包含对环境变量的引用。JavaScript恶意用户可能会尝试使用 JavaScript 进行几种类型的攻击。一个例子是跨站脚本攻击即用户在自己的网站上编写并运行自己的 JavaScript 代码。例如让我们想象我们有一个 Django 应用程序它有一个单一的 URLurlpatterns [ path(path:path, views.index, nameindex) ]以及一个单一视图def index(request, path): return HttpResponse(fRequested Path: {path})该网站本质上告诉用户他们导航到的 URL 是什么https://github.com/OpenDocCN/cs-notes-pt3-zh/raw/master/docs/hav-cs50/img/52abe2a36b27c353c6f1f1c7f694b200.png但用户现在可以通过在 URL 中输入来轻松地将一些 JavaScript 插入页面https://github.com/OpenDocCN/cs-notes-pt3-zh/raw/master/docs/hav-cs50/img/b820901a0e7edb57a9716be38cedbd57.png虽然这个alert示例相对无害但要包含一些操纵 DOM 或使用fetch发送请求的 JavaScript 并不会更困难。跨站请求伪造我们已经讨论了如何使用 Django 来防止 CSRF 攻击但让我们看看没有这种保护会发生什么。作为一个例子想象一家银行有一个你可以访问的 URL可以从你的账户中转账。一个人可以轻松地创建一个链接来执行这种转账a hrefhttp://yourbank.com/transfer?tobrianamt2800 Click Here! /a这种攻击甚至可能比链接更微妙。如果 URL 被放在图片中那么它将在浏览器尝试加载图片时被访问img srchttp://yourbank.com/transfer?tobrianamt2800由于这个原因每次你构建一个可以接受某些状态变化的应用程序时都应该使用 POST 请求。即使银行要求 POST 请求隐藏表单字段仍然可以诱使用户意外提交请求。以下表单甚至不需要用户点击它会自动提交body onloaddocument.forms[0].submit() form actionhttps://yourbank.com/transfer methodpost input typehidden nameto valuebrian input typehidden nameamt value2800 input typesubmit valueClick Here! /form /body上述示例展示了跨站请求伪造可能的样子。我们可以通过在加载网页时创建 CSRF 令牌来阻止此类攻击并且只接受带有有效令牌的表单。接下来是什么我们在本课程中讨论了许多 Web 框架如 Django 和 React但还有更多你可能感兴趣的框架服务器端Express.jsRuby on RailsFlask…客户端Angular JSReactVue.jsReact Native…在未来你可能还希望能够通过多种不同的服务将你的网站部署到网络上Amazon Web ServicesGitHubHerokuNetlifyGoogle CloudMicrosoft Azure…我们自从这门课程开始以来已经走得很远了覆盖了大量的材料但在网络编程的世界里还有很多东西要学习。尽管有时可能会感到压倒性但学习更多知识的最佳方法之一就是投身到一个项目中看看你能将它推进多远。我们相信在这个阶段你在网络设计概念方面已经打下了坚实的基础而且你已经拥有了将一个想法转化为你自己的工作网站所需的一切
返回列表