web安全学习笔记(8)

记一下第十二节课的内容。

一、PHP文件包含的四种方式

Include和Include_once

        操作系统会读取包含的文件的内容,并将它插入主文件中,include方式的文件包含会在包含失败的情况下输出警告信息,而include_once方式会检查包含的文件是否已经被包含过,如果已经包含过则不再重新包含。

Require和Require_once

        require和require_once方式的文件包含和include与include_once是类似的,不过它们之间的不同点在于把汗出错时,require方式会直接导致程序终止并输出错误信息,而include方式只是警告信息。require_once方式会检查包含的文件是否以及被包含过,如果已经包含过则不再重新包含。这一点和include_once方式是一样的。

进行一下示例:

将login.php改为如下内容:

<?phpinclude('./function.php')/*#用户名$username = $_POST['username'];#密码$password = $_POST['password'];#判断用户名与密码不正确则输出失败if ($username != 'admin' || $password != '123456') {die('<script>alert("登录失败!");location.href = "./login.html"</script>'); } echo '登录成功!';*/
?>

function.php文件中输入如下内容:

<?php
echo 111;

我们再进行登录,就echo出来了111

思考:如果多次使用include和include_once,以及require和require_once,当文件名正确或者错误时,会出现什么情况?

那么我们把login.php改名为index.php(黑鬼改的,我也不知道为啥改名,跟着改吧)

然后将其中代码改为:

<?php$a = $_GET['a'];$b = $_GET['b'];switch ($a) {case 'login':switch ($b) {case 'index':require_once('./login.html'); -break;default:# code...break;}break;default:# code...break;}
?>

当我们在login.html中,点击登录之后,就会出现空白页面,因为这段switch代码并没有有效执行

可以看到,跳转之后是空白页面。

那么我们如何让这段代码执行呢?通过更改我们的网址,在后面加上如下内容,就会让require_once得到执行。

然后我们将login.php改为如下内容:

<?php$a = $_GET['a'];$b = $_GET['b'];$f = $_SERVER['REQUEST_METHOD'];switch ($a){case 'login':switch ($b){case 'index':switch ($f) {case 'GET':require_once('./login.html');break;case 'POST':echo 111;break;default:# code...break;}break;default:# code...break;}break;default:# code...break;}
?>

再进行访问,会发现还会回跳到login.html的页面:

原因是我们多了一层switch嵌套之后,实际上相当于多判断一次传参方式是否是get传参,而此处显然是,所以可以正常显示。另外,$_SERVER 是PHP预定义的超全局变量。所谓“超全局变量”,即在脚本全部作用域中都可以使用,$_SERVER保存关于报头、路径和脚本位置的信息。

主要内容详解

  • $_SERVER["SCRIPT_NAME"] => "/index.php",当前脚本路径
  • $_SERVER["REQUEST_URI"] => "/index.php?id=1",访问的页面URI,包含查询字符串
  • $_SERVER["QUERY_STRING"] => "id=1",查询字符串,不存在为" "
  • $_SERVER["REQUEST_METHOD"] => "GET",请求方法,如"POST"、"PUT"等
  • $_SERVER["SERVER_PROTOCOL"] => "HTTP/1.1",通信协议的名称和版本
  • $_SERVER["GATEWAY_INTERFACE"] => "CGI/1.1",服务器使用的CGI 规范的版本
  • $_SERVER["REMOTE_PORT"] => "60599",用户连接服务器使用的端口
  • $_SERVER["SCRIPT_FILENAME"] => "E:/WWW/example/index.php",当前脚本的绝对路径
  • $_SERVER["DOCUMENT_ROOT"] => "E:/WWW/example/",当前脚本文档根目录的绝对路径
  • $_SERVER["REMOTE_ADDR"] => "127.0.0.1",用户的IP地址
  • $_SERVER["SERVER_PORT"] => "80",服务器使用的端口
  • $_SERVER["SERVER_ADDR"] => "127.0.0.1",服务器的IP地址
  • $_SERVER["SERVER_NAME"] => "www.example.com",服务器的主机名,注:如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。在 Apache 2 里,必须设置 UseCanonicalName = On 和 ServerName。 否则该值会由客户端提供,就有可能被伪造。 上下文有安全性要求的环境里,不应该依赖此值。
  • $_SERVER["SERVER_SOFTWARE"] => "Apache/2.4.23 (Win32) OpenSSL/1.0.2j mod_fcgid/2.3.9",响应头中Server的内容
  • $_SERVER["SERVER_SIGNATURE"] => "",包含了服务器版本和虚拟主机名的字符串
  • $_SERVER["HTTP_HOST"] => "www.example.com",请求头中Host项的内容
  • $_SERVER["HTTP_CONNECTION"] => "keep-alive",请求头中Connection项的内容
  • $_SERVER["HTTP_PRAGMA"] => "no-cache",请求头中Pragma项的内容
  • $_SERVER["HTTP_CACHE_CONTROL"] => "no-cache",请求头中Cache-Control项的内容
  • $_SERVER["HTTP_UPGRADE_INSECURE_REQUESTS"] => "1",请求头中Upgrade-Insecure-Requests项的内容
  • $_SERVER["HTTP_USER_AGENT"] => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36",请求头中User-Agent项的内容
  • $_SERVER["HTTP_ACCEPT"] => "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8",请求头中Accept项的内容
  • $_SERVER["HTTP_ACCEPT_ENCODING"] => "gzip, deflate",请求头中Accept-Encoding项的内容
  • $_SERVER["HTTP_ACCEPT_LANGUAGE"] => "zh-CN,zh;q=0.8",请求头中Accept-Language项的内容
  • $_SERVER["PHP_SELF"] => "/index.php",当前执行脚本的文件名
  • $_SERVER["REQUEST_TIME_FLOAT"] => 1510112348.8084,请求开始的时间戳,微秒级别精准度
  • $_SERVER["REQUEST_TIME"] => 1510112348,请求开始的时间戳

此处用到的就是$_SERVER["REQUEST_METHOD"] ,表示请求方法,如"POST"、"PUT"等。

引用自PHP 的 $_SERVER详解-CSDN博客

二、PHP的数据类型——数组和字典

1.数组

 1.1一维数组

用一个实例说明数组的定义和访问:

<?php
$array = [0 => 'a',1 => 'b',2 => 'c',3 => 'd'
];echo $array[1];

通过网页访问:

或者通过下面方式声明:

<?php
$array = ['1','2','3','4','5'];
echo $array[4];

下面我们来看一下键值数组:

<?php
$array = ['name' => 'zhangsan','age' => 30,
];echo $array['age'];

1.2二维数组

定义一个二维数组,并使用var_dump函数查看其数据类型:

<?php
$array = [[1,2,3,4,5,6],[1,2,3,4,5,6]];
var_dump($array);

不难发现,实际上,二维数组就是数组的嵌套使用。类似地,还有三维数组、四维数组……

要取二维数组的某个元素,使用$array[i][j]即可,i指的是第i个数组,j指的是第i个数组中的第j个元素。注意:数字占一个字节,而中文占三个字节。

1.3键值数组

不多bb,上代码:

<?php
$array = [['name' => '张三'],['name' => '99'],['name' => '丁真','smile' => '纯真','animalfriend' => '雪豹',]
];
echo $array[2]['animalfriend'], '闭嘴';

2.字典

没讲,应该是下节课讲。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/302987.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

翻译笔实现文字识别功能的原理

翻译笔作为一种便携式设备&#xff0c;近年来在语言学习、旅游、商务交流等领域中逐渐受到人们的青睐。其核心功能之一便是文字识别&#xff0c;即将纸质或电子文档中的文字快速、准确地转化为机器可读的文本格式。那么&#xff0c;翻译笔是如何实现这一神奇功能的呢&#xff1…

Redis中的集群(三)

集群 槽指派 记录节点的槽指派信息。 clusterNode结构的slots属性和numslot属性记录了节点负责处理哪些槽: struct clusterNode { // ... unsigned char slots[16384/8];int numslots; // ... }slots属性是一个二进制位数组(bit array)&#xff0c;这个数组的长度位16384/8…

由近期 RAGFlow 的火爆看 RAG 的现状与未来

4 月 1 日&#xff0c;InfiniFlow &#xff08;英飞流&#xff09;的端到端 RAG 解决方案 RAGFlow 正式开源&#xff0c;首日即获得了 github 千星&#xff0c;目前已接近 3000 star。在这之前&#xff0c;InfiniFlow 还开源了专门用于 RAG 场景的 AI 原生数据库 Infinity&…

gpt科普1 GPT与搜索引擎的对比

GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一种基于Transformer架构的自然语言处理模型。它通过大规模的无监督学习来预训练模型&#xff0c;在完成这个阶段后&#xff0c;可以用于各种NLP任务&#xff0c;如文本生成、机器翻译、文本分类等。 以下是关…

Flutter之TabBar篇

总结了一下项目中用到的几种TabBar&#xff0c;针对不同的样式&#xff0c;有采用系统提供的&#xff0c;也有三方插件提供的&#xff0c;也有自定义的&#xff0c;效果如下&#xff08;后续如果遇到新的样式&#xff0c;会不间断地记录更新&#xff0c;避免重复造轮子…&#…

Day:004(4) | Python爬虫:高效数据抓取的编程技术(数据解析)

XPath工具 浏览器-元素-CtrlF 浏览器-控制台- $x(表达式) Xpath helper (安装包需要科学上网) 问题 使用离线安装包 出现 程序包无效 解决方案 使用修改安装包的后缀名为 rar&#xff0c;解压文件到一个文件夹&#xff0c;再用 加载文件夹的方式安装即可 安装 python若使用…

上门服务小程序|上门服务系统|上门服务软件开发流程

在如今快节奏的生活中&#xff0c;上门服务小程序的需求越来越多。它们向用户提供了方便、高效的服务方式&#xff0c;解决了传统服务行业中的很多痛点。如果你也想开发一个上门服务小程序&#xff0c;以下是开发流程和需要注意的事项。 1、确定需求&#xff1a;在开始开发之前…

ChromeDriver / Selenium-server

一、简介 ChromeDriver 是一个 WebDriver 的实现&#xff0c;专门用于自动化控制 Google Chrome 浏览器。以下是关于 ChromeDriver 的详细说明&#xff1a; 定义与作用&#xff1a; ChromeDriver 是一个独立的服务器程序&#xff0c;作为客户端库与 Google Chrome 浏览…

云安全在金融领域的作用是什么?

云安全在金融领域发挥着至关重要的作用&#xff0c;使金融机构能够保护敏感数据、遵守监管要求并推动创新。通过实施强有力的安全措施、利用先进技术并对新出现的威胁保持警惕&#xff0c;金融机构可以保护其数字资产并维持客户的信任。 金融机构面临的挑战 1.缺乏全网数据支撑…

uniapp小程序下载并导出excel

<button click"confirmExport">导出excel</button>confirmExport() {let header {"X-Access-Token": uni.getStorageSync(ACCESS_TOKEN), //自定义请求头信息} let url "http"/......"; // 后端API地址uni.request({url: ur…

20240309web前端_第三周作业_教务系统页面

作业&#xff1a;教务系统页面 成果展示&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1…

实战要求下,如何做好资产安全信息管理

文章目录 一、资产安全信息管理的重要性二、资产安全信息管理的痛点三、如何做好资产安全信息管理1、提升资产安全信息自动化、集约化管理能力&#xff0c;做到资产全过程管理2、做好资产的安全风险识别3、做好互联网暴露面的测绘与管空4、做好资产安全信息的动态稽核管理 “摸…

强化学习:基础开发

基本就是把看到有用的资料整合在一起了 资料 https://blog.csdn.net/weixin_48878618/article/details/133590646 https://blog.csdn.net/weixin_42769131/article/details/104783188?ops_request_misc%257B%2522request%255Fid%2522%253A%2522166792845916800182132771%25…

【原创】springboot+vue个人财务记账管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

创建个人百度百科需要什么条件?

互联网时代&#xff0c;创建百度百科词条可以给个人带来更多的曝光和展现&#xff0c;相当于一个镀金的网络名片&#xff0c;人人都想上百度百科&#xff0c;但并不是人人都能创建上去的。 个人百度百科词条的创建需要满足一定的条件&#xff0c;今天伯乐网络传媒就来给大家聊聊…

Vitalik Buterin香港主旨演讲:协议过去10年迅速发展,但存在效率、安全两大问题

2024 香港 Web3 嘉年华期间&#xff0c;以太坊联合创始人 Vitalik Buterin 在由DRK Lab主办的“Web3 学者峰会 2024”上发表主旨演讲《Reaching the Limits of Protocol Design》。 他介绍到&#xff0c;2010年代&#xff0c;基于基本密码学的协议是哈希、签名。随后&#xff…

[当人工智能遇上安全] 13.威胁情报实体识别 (3)利用keras构建CNN-BiLSTM-ATT-CRF实体识别模型

《当人工智能遇上安全》系列将详细介绍人工智能与安全相关的论文、实践&#xff0c;并分享各种案例&#xff0c;涉及恶意代码检测、恶意请求识别、入侵检测、对抗样本等等。只想更好地帮助初学者&#xff0c;更加成体系的分享新知识。该系列文章会更加聚焦&#xff0c;更加学术…

目标检测——YOLO系列学习(一)YOLOv1

YOLO可以说是单阶段的目标检测方法的集大成之作&#xff0c;必学的经典论文&#xff0c;从准备面试的角度来学习一下yolo系列。 YOLOv1 1.RCNN系列回顾 RCNN系列&#xff0c;无论哪种算法&#xff0c;核心思路都是Region Proposal&#xff08;定位&#xff09; classifier&am…

【蓝桥杯嵌入式】串口通信与RTC时钟

【蓝桥杯嵌入式】串口通信与RTC时钟 串口通信cubemx配置串口通信程序设计 RTC时钟cubemx配置程序设计 串口通信 cubemx配置 打开串口通信&#xff0c;并配置波特率为9600 打开串口中断 重定义串口接收与发送引脚&#xff0c;默认是PC4&#xff0c;PC5&#xff0c;需要改为P…

UVA12538 Version Controlled IDE 题解 crope

Version Controlled IDE 传送门 题面翻译 维护一种数据结构&#xff0c;资磁三种操作。 1.在p位置插入一个字符串s 2.从p位置开始删除长度为c的字符串 3.输出第v个历史版本中从p位置开始的长度为c的字符串 1 ≤ n ≤ 50000 1 \leq n \leq 50000 1≤n≤50000&#xff0c;所…