笨办法学 Python · 续 练习 51:`lessweb`
练习 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
的文档。您将使用requests
或http.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
,那么你赢了。尝试解释为什么会发生这种情况,以及您可以如何解决这个问题。 - 没有处理非预期的请求。你最有可能寻找
GET
和POST
,但如果有人执行HEAD
或OPTIONS
,会发生什么? - 发送一个巨大的 HTTP 协议头。看看您是否可以通过发送一个非常大的 HTTP 请求头,使 Python
http.server
崩溃或减慢速度。 - 请求未知域时不会出现错误。有些人认为它是一个功能(咳咳,Nginx),当服务器无法识别域时,会提供“随机”网站。您的服务器应该只是白名单,如果它不识别该域,它应该给出 404 错误。
这些只是人们所犯的一些小错误。研究尽可能多的其他人,然后为您的服务器编写自动化测试,以便在您解决问题之前展示它们。如果您的服务器中找不到任何这些错误,那么故意创建它们。了解如何犯下这些错误也是有益的。
研究性学习
阅读 Python 3 os
文档中的os.chroot
函数。
研究如何使用这个函数和其他os
模块的函数来创建“根目录限制”。
使用os
中的许多函数以及您可以找到的任何模块,重写您的服务器,来正确地实现“根目录限制”,并丢弃权限变成安全用户(而不是 root)。在 Windows 上,这可能非常困难,所以要么在 Linux 计算机上尝试,要么完全跳过它。
笨办法学 Python · 续 练习 51:`lessweb`相关推荐
- 笨办法学 Python · 续 中文版
笨办法学 Python · 续 中文版 原书:Learn More Python 3 The Hard Way 译者:飞龙 自豪地采用谷歌翻译 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓 ...
- 笨办法学 Python · 续 练习 33:解析器
练习 33:解析器 原文:Exercise 33: Parsers 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 想象一下,你将获得一个巨大的数字列表,你必须将其输入到电子表格 ...
- 笨办法学 Python · 续 练习 0:起步
练习 0:起步 原文:Exercise 0: The Setup 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你需要设置和配置一些工具来学习此书.有可能你已经有了很多这些东西 ...
- 笨办法学 Python · 续 第二部分:简单的黑魔法
第二部分:简单的黑魔法 原文:Part II: Quick Hacks 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你有最好的想法,你会打动世界!你会成为一个亿万富豪!你的大 ...
- 笨办法学 Python · 续 练习 52:`moreweb`
练习 52:moreweb 原文:Exercise 52: moreweb 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 现在,你已经使用 Python http.server ...
- 笨办法学 Python · 续 练习 24:URL 快速路由
练习 24:URL 快速路由 原文:Exercise 24: Fast URL Search 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我们将结束数据结构和算法的部分,并将 ...
- 笨办法学 Python · 续 练习 32:扫描器
练习 32:扫描器 原文:Exercise 32: Scanners 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我的第一本书在练习 48 中非常偶然涉及到了扫描器,但现在我 ...
- python描述器 有限状态机_笨办法学 Python · 续 练习 30:有限状态机
练习 30:有限状态机 每当你阅读一本关于解析的书,都有一个可怕的章节,关于有限状态机(FSM).他们对"边"和"节点"进行了详细的分析,每个可能的" ...
- 笨办法学 Python · 续 第三部分:数据结构
第三部分:数据结构 原文:Part III: Data Structures 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你正在以你的方式构建个人流程,它让你以有限的阻碍快速 ...
最新文章
- npm获取配置,设置代理
- vscode中内置集成终端显示为git(bash.exe)
- Android SDK Manager国内下载缓慢的问题
- vue 记录滚动位置_vue 路由跳转记住滚动位置,返回时回到上次滚动位置
- java 队列的数组_JAVA-循环数组实现简单的队列
- sql语句查询Oracle|sql server|access 数据库里的所有表名,字段名
- 让程序结果在屏幕上暂停一段时间
- linux 内核字符驱动char_dev源码分析
- 【Linux】SecureCRT中按退格键出现^H
- mysql工厂模式_工厂模式IDAL详解
- c语言 面试前必备基础知识
- 排名前十名的WAP网站
- html无法显示echarts地图,pyecharts 地图不显示问题
- SecureCRT软件的使用
- 单片机怎么通过按键控制计时器的开始和停止_《搞机作战室》机械师PX780控制中心软件使用教程...
- 实例讲解EasyLanguage入门
- 小红书4大主要人群的消费特征,你占了几个?
- 一次阿里巴巴的电话面试
- STM32F1和F4的区别
- 无MAC法安装genymotion的解决办法_Invalid reply from server..
热门文章
- 一定质量的封闭气体被压缩后_单螺杆压缩机
- linux5怎么删除目录,Linux中目录的创建与删除命令使用说明
- python print 变量_0、python 的 print()函数、变量和赋值
- php跳过代码,PHP利用continue实现跳过本次循环中剩余代码的注意点
- 高一计算机应用选择题,职业中学 高一《计算机应用基础》期末考试题
- 阴阳师服务器维护更新,阴阳师服务器3月10日维护更新了什么 阴阳师服务器3月10日维护更新一览...
- 菜鸟学习笔记:Java基础篇5(抽象类与接口、回调函数、内部类)
- java 创建日程到期提醒_在便签提醒类APP排行中哪个软件可以定时提醒每日日程待办?...
- c语言调用子程序,哪位师傅知道51单片机怎样编写子程序?C语言的。在主程序里调...
- 《RabbitMQ 实战指南》第二章 RabbitMQ 入门