练习 51:lessweb

原文:Exercise 51: lessweb

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

我们很接近这本书的末尾了,所以在最后两个练习中我将给你一个项目。您将要创建一个 Web 服务器。在本练习中,您只需了解 Python http.server模块以及如何创建简单 Web 服务器来使用它。我将给你指示,然后让你阅读文档来了解如何实现它。这里没有太多的指导,因为现在你应该可以自己做大部分的事情。

创建 Web 服务器后,您将会编写一组测试,来尝试破坏您的 Web 服务器。我将在“破坏它”部分中为您提供一些指导,但现在您应该非常乐意在您编写的代码中找到缺陷。

挑战练习

您需要阅读 Python 3 的http.server文档来起步。您还应阅读 Python 3 的http.client文档以及requests的文档。您将使用requestshttp.client为您创建的http.server编写测试。

接下来,您的工作是使用http.server创建一的 Web 服务器,可以执行以下操作:

  • 从配置文件中进行配置
  • 一直运行并处理收到的请求
  • 提供配置目录中的文件
  • 响应网站的请求并提供正确的内容
  • 记录所有进入文件的请求,以便之后读取

如果您阅读文档中的示例,您大概可以以基本的方式,让大部分东西都工作。这个练习的一部分是,如何 Hack 一个朴素的 Web 服务器,所以你应该只是让它能够工作,然后我们将转到下一部分。

破坏它

您在本节中的工作是,以任何方式攻击您的 Web 服务器。您可以从 OWASP 十大漏洞列表开始,然后继续进行其他常见攻击。您还将阅读 Python 3 os模块文档来实现一些修复。这是一个额外的错误列表,我敢肯定你会犯这些错误:

  • 非预期的目录遍历。您可能从URL(/some/file/index.html)中获取基本路径,仅仅按照请求打开它。也许你在操作系统上添加了文件的完整路径(/Users/zed/web/some/file/index.html),并认为你做得很好。尝试使用..路径说明符来访问此目录外的文件。如果你可以请求/../../../../../../../../etc/passwd,那么你赢了。尝试解释为什么会发生这种情况,以及您可以如何解决这个问题。
  • 没有处理非预期的请求。你最有可能寻找GETPOST,但如果有人执行HEADOPTIONS,会发生什么?
  • 发送一个巨大的 HTTP 协议头。看看您是否可以通过发送一个非常大的 HTTP 请求头,使 Python http.server崩溃或减慢速度。
  • 请求未知域时不会出现错误。有些人认为它是一个功能(咳咳,Nginx),当服务器无法识别域时,会提供“随机”网站。您的服务器应该只是白名单,如果它不识别该域,它应该给出 404 错误。

这些只是人们所犯的一些小错误。研究尽可能多的其他人,然后为您的服务器编写自动化测试,以便在您解决问题之前展示它们。如果您的服务器中找不到任何这些错误,那么故意创建它们。了解如何犯下这些错误也是有益的。

研究性学习

阅读 Python 3 os文档中的os.chroot函数。
研究如何使用这个函数和其他os模块的函数来创建“根目录限制”。
使用os中的许多函数以及您可以找到的任何模块,重写您的服务器,来正确地实现“根目录限制”,并丢弃权限变成安全用户(而不是 root)。在 Windows 上,这可能非常困难,所以要么在 Linux 计算机上尝试,要么完全跳过它。

笨办法学 Python · 续 练习 51:`lessweb`相关推荐

  1. 笨办法学 Python · 续 中文版

    笨办法学 Python · 续 中文版 原书:Learn More Python 3 The Hard Way 译者:飞龙 自豪地采用谷歌翻译 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓 ...

  2. 笨办法学 Python · 续 练习 33:解析器

    练习 33:解析器 原文:Exercise 33: Parsers 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 想象一下,你将获得一个巨大的数字列表,你必须将其输入到电子表格 ...

  3. 笨办法学 Python · 续 练习 0:起步

    练习 0:起步 原文:Exercise 0: The Setup 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你需要设置和配置一些工具来学习此书.有可能你已经有了很多这些东西 ...

  4. 笨办法学 Python · 续 第二部分:简单的黑魔法

    第二部分:简单的黑魔法 原文:Part II: Quick Hacks 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你有最好的想法,你会打动世界!你会成为一个亿万富豪!你的大 ...

  5. 笨办法学 Python · 续 练习 52:`moreweb`

    练习 52:moreweb 原文:Exercise 52: moreweb 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 现在,你已经使用 Python http.server ...

  6. 笨办法学 Python · 续 练习 24:URL 快速路由

    练习 24:URL 快速路由 原文:Exercise 24: Fast URL Search 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我们将结束数据结构和算法的部分,并将 ...

  7. 笨办法学 Python · 续 练习 32:扫描器

    练习 32:扫描器 原文:Exercise 32: Scanners 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我的第一本书在练习 48 中非常偶然涉及到了扫描器,但现在我 ...

  8. python描述器 有限状态机_笨办法学 Python · 续 练习 30:有限状态机

    练习 30:有限状态机 每当你阅读一本关于解析的书,都有一个可怕的章节,关于有限状态机(FSM).他们对"边"和"节点"进行了详细的分析,每个可能的" ...

  9. 笨办法学 Python · 续 第三部分:数据结构

    第三部分:数据结构 原文:Part III: Data Structures 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你正在以你的方式构建个人流程,它让你以有限的阻碍快速 ...

最新文章

  1. npm获取配置,设置代理
  2. vscode中内置集成终端显示为git(bash.exe)
  3. Android SDK Manager国内下载缓慢的问题
  4. vue 记录滚动位置_vue 路由跳转记住滚动位置,返回时回到上次滚动位置
  5. java 队列的数组_JAVA-循环数组实现简单的队列
  6. sql语句查询Oracle|sql server|access 数据库里的所有表名,字段名
  7. 让程序结果在屏幕上暂停一段时间
  8. linux 内核字符驱动char_dev源码分析
  9. 【Linux】SecureCRT中按退格键出现^H
  10. mysql工厂模式_工厂模式IDAL详解
  11. c语言 面试前必备基础知识
  12. 排名前十名的WAP网站
  13. html无法显示echarts地图,pyecharts 地图不显示问题
  14. SecureCRT软件的使用
  15. 单片机怎么通过按键控制计时器的开始和停止_《搞机作战室》机械师PX780控制中心软件使用教程...
  16. 实例讲解EasyLanguage入门
  17. 小红书4大主要人群的消费特征,你占了几个?
  18. 一次阿里巴巴的电话面试
  19. STM32F1和F4的区别
  20. 无MAC法安装genymotion的解决办法_Invalid reply from server..

热门文章

  1. 一定质量的封闭气体被压缩后_单螺杆压缩机
  2. linux5怎么删除目录,Linux中目录的创建与删除命令使用说明
  3. python print 变量_0、python 的 print()函数、变量和赋值
  4. php跳过代码,PHP利用continue实现跳过本次循环中剩余代码的注意点
  5. 高一计算机应用选择题,职业中学 高一《计算机应用基础》期末考试题
  6. 阴阳师服务器维护更新,阴阳师服务器3月10日维护更新了什么 阴阳师服务器3月10日维护更新一览...
  7. 菜鸟学习笔记:Java基础篇5(抽象类与接口、回调函数、内部类)
  8. java 创建日程到期提醒_在便签提醒类APP排行中哪个软件可以定时提醒每日日程待办?...
  9. c语言调用子程序,哪位师傅知道51单片机怎样编写子程序?C语言的。在主程序里调...
  10. 《RabbitMQ 实战指南》第二章 RabbitMQ 入门