前提
1、在实验时,需要在 DVWA Security模块,设置需要实验的级别,对于不同的级别,php会调用不同的代码去执行用户操作。对于low level,系统的安全性低,容易受到攻击。impossible级别,系统的安全性高,很难受到攻击。
2、在每个模块,右下角,可以看到设置的对应级别的php代码实现和对该模块的帮助。
File upload文件上传
lowlevel
低级别不会以任何方式检查正在上传的文件的内容。它只依赖于信任,任何文件都可以上传。
上传image
可见对上传文件的类型,内容都没有限制,jpeg,jmx都可以上传。
medium level
使用中级时,它将在上传时检查客户端报告的文件类型。
提示只能上传jepg和png,其他格式文件会被拒绝上传。
上传jepg成功。
Hight level
从客户端收到文件后,服务器将尝试调整请求中包含的任何图像的大小。
源码解析:
PHP语言编写的,用于上传图片文件。在上传文件之前,代码首先检查文件是否符合要求。要求包括文件类型必须为“jpg”、“jpeg”或“png”,文件大小应小于100KB,且必须是合法的图像文件。如果文件符合要求,代码将把文件移动到上传文件夹中并打印出上传成功的信息,否则,代码将打印出错误信息并拒绝上传该文件。
impossible
这将检查到目前为止所有级别的所有内容,然后重新编码图像。这将创建一个新图像,从而剥离 任何“非图像”代码(包括元数据)。
(比上一个级别多了重新编码图像)
可以看到文件被重新命名了。
源码解析:
实现了一个文件上传功能,主要功能包括:
- 检查 Anti-CSRF 令牌,确保表单提交来源正确。
- 获取上传文件的相关信息,包括文件名、扩展名、大小、类型、临时文件路径等。
- 定义上传文件的目标路径和文件名,将上传文件转移到目标路径下。
- 对上传的图片进行转换和处理,去除元数据信息。
- 对上传文件进行格式和大小的校验,只接受 JPEG 或 PNG 格式,大小不超过 100KB。
- 最终输出上传结果,包括成功或失败的提示信息,以及上传成功后的文件下载链接。
其中主要函数和方法的作用如下:
- `checkToken`:检查 Anti-CSRF 令牌,确保表单提交来源正确。
- `getimagesize`:获取图片的尺寸和类型。
- `imagecreatefromjpeg`:从 JPEG 格式的文件中创建一个新的图像。
- `imagecreatefrompng`:从 PNG 格式的文件中创建一个新的图像。
- `rename`:将文件重命名或将一个文件移动到新位置。
- `unlink`:删除文件。