一.php安全知识点
-
语法和注释:以开始,?>结束,//为单行注释,/**/为多行注释
- 两个基本的输出方式:echo和print,print只允许输出一个字符串,返回值总为1;echo可以输出一个或多个字符串,一般用于回显
- 变量规则:
- 以$符号+变量名称命名
- 必须以字母或者下划线开始
- 只能包含字母数字以及下划线
- 不能包含空格
- 区分大小写
- 超级全局变量,定义后在任何地方都不能改变:
- $GLOBALS 是一个包含了全部变量的全局组合数组,是一个特殊的数组,它允许你在函数内部访问和修改函数外部定义的变量,包括全局变量。
- $_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个变量是一个关联数组,其中的键名全部为大写字母,而值则依赖于服务器和运行环境。
- $_REQUEST用于收集通过HTTP请求发送给脚本的变量,可以用来访问通过GET、POST或COOKIE方法提交的数据。
- $_GET 通过URL的查询字符串传递数据,数据在URL中可见且长度有限制
- $_POST 通过HTTP请求的正文部分传递数据,数据不可见且没有长度限制
- $_COOKIE用于收集通过HTTP Cookies发送给脚本的变量。
- 常用函数
- array() 创建数组
- bool is_numeric ( mixed $var ) 检测变量是否为数字或数字字符串如果 $var 是数字或数字字符串,则返回 true;否则,返回 false。
- rand(min,max)生成随机整数
- sleep(seconds)延迟执行当前脚本若干秒
- bool isset ( mixed $var [, mixed $... ] )检测变量是否已设置并且非 NULL
- die(message)输出一条消息,并退出当前脚本。
- 与字符串相关的
- int preg_match ( string $pattern , string $subject) 执行一个正则表达式匹配,$pattern是想要匹配的正则表达式,$subject是进行搜索和匹配的字符串。在PHP正则表达式中,/i 确实表示对大小写不敏感。
- mb_substr ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] ) : string表示返回字符串的一部分:mb_substr 函数是 PHP 中用于处理多字节字符编码的字符串函数之一。$str为输入的字符串。$start:开始提取的位置(从0开始计数)。如果‘start` 是负数,则它表示从字符串的末尾开始的位置。$length要提取的字符数。如果省略或设置为‘NULL‘,则提取从‘start` 到字符串末尾的所有字符。$encoding表示字符编码。例如:$str = "你好,世界!";echo mb_substr($str, 0, 2)//提取从第0个字符开始的两个字符。
二.HTTP协议(超文本传输协议)
1. HTTP协议是一种用于分布式、协作式和超媒体信息系统的应用层协议,是因特网上应用最为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准。
2. HTTP是为Web浏览器与Web服务器之间的通信而设计的,也可以用于其他目的。
3. HTTP是一个基于TCP/IP通信协议来传递数据的(HTML文件,托文件,查询结果等)
HTTP的工作原理:
HTTP协议工作于客户端-服务端架构上
浏览器作为 HTTP 客户端通过 URL 向 HTTP 服务端即 WEB 服务器发送所有请求。
Web 服务器有:Apache 服务器,IIS 服务器(Internet Information Services)等。
Web 服务器根据接收到的请求后,向客户端发送响应信息。
HTTP 默认端口号为 80,但是你也可以改为 8080 或者其他端口。
HTTP注意事项:
HTTP是无连接的(每次连接只处理一次请求,收到客户的应答后端口连接,节省传输时间)
HTTP是媒体独立的(只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送,客户端以及服务器指定使用适合的 MIME-type 内容类型。)
HTTP协议是无状态协议(对于事务处理没有记忆能力)
三.HTTPS协议(超文本传输安全协议)
1. HTTPS协议是一种通过计算机网络进行安全通信的传输协议。
2. HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包,HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换资料的隐私与完整性。
3. HTTP 的 URL 是由 http:// 起始与默认使用端口 80,而 HTTPS 的 URL 则是由 https:// 起始与默认使用端口443。
4. HTTPS 的主要作用是在不安全的网络上创建一个安全信道,并可在使用适当的加密包和服务器证书可被验证且可被信任时,对窃听和中间人攻击提供合理的防护。
与一个网站之间的 HTTPS 连线仅在这些情况下可被信任:
1. 浏览器正确地实现了 HTTPS 且操作系统中安装了正确且受信任的证书颁发机构;
2. 证书颁发机构仅信任合法的网站;
3. 被访问的网站提供了一个有效的证书,也就是说它是一个由操作系统信任的证书颁发机构签发的(大部分浏览器会对无效的证书发出警告);
4. 该证书正确地验证了被访问的网站;
5. 此协议的加密层(SSL/TLS)能够有效地提供认证和高强度的加密。
HTTP+SSL=HTTPS
HTTP消息结构
客户端请求消息:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成
服务器相应消息:HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
HTTP请求方法
HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
序号 方法 描述
1 GET 请求指定的页面信息,并返回实体主体。
2 HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
5 DELETE 请求服务器删除指定的页面。
6 CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
7 OPTIONS 允许客户端查看服务器的性能。
8 TRACE 回显服务器收到的请求,主要用于测试或诊断。
9 PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新 。
HTTP状态码
下面是常见的 HTTP 状态码:
200 - 请求成功 301 - 资源(网页等)被永久转移到其它URL 404 - 请求的资源(网页等)不存在 500 - 内部服务器错误
HTTP 状态码分类
HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型。响应分为五类:信息响应(100–199),成功响应(200–299),重定向(300–399),客户端错误(400–499)和服务器错误 (500–599):
分类 | 分类描述 |
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
HTTP状态码列表:
状态码 | 状态码英文名称 | 中文描述 |
100 | Continue | 继续。客户端应继续其请求 |
101 | Switching Protocols | 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |
200 | OK | 请求成功。一般用于GET与POST请求 |
201 | Created | 已创建。成功请求并创建了新的资源 |
202 | Accepted | 已接受。已经接受请求,但未处理完成 |
203 | Non-Authoritative Information | 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本 |
204 | No Content | 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档 |
205 | Reset Content | 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域 |
206 | Partial Content | 部分内容。服务器成功处理了部分GET请求 |
300 | Multiple Choices | 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择 |
301 | Moved Permanently | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 | Found | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
303 | See Other | 查看其它地址。与301类似。使用GET和POST请求查看 |
304 | Not Modified | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
305 | Use Proxy | 使用代理。所请求的资源必须通过代理访问 |
306 | Unused | 已经被废弃的HTTP状态码 |
307 | Temporary Redirect | 临时重定向。与302类似。使用GET请求重定向 |
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
401 | Unauthorized | 请求要求用户的身份认证 |
402 | Payment Required | 保留,将来使用 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
405 | Method Not Allowed | 客户端请求中的方法被禁止 |
406 | Not Acceptable | 服务器无法根据客户端请求的内容特性完成请求 |
407 | Proxy Authentication Required | 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权 |
408 | Request Time-out | 服务器等待客户端发送的请求时间过长,超时 |
409 | Conflict | 服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突 |
410 | Gone | 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置 |
411 | Length Required | 服务器无法处理客户端发送的不带Content-Length的请求信息 |
412 | Precondition Failed | 客户端请求信息的先决条件错误 |
413 | Request Entity Too Large | 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息 |
414 | Request-URI Too Large | 请求的URI过长(URI通常为网址),服务器无法处理 |
415 | Unsupported Media Type | 服务器无法处理请求附带的媒体格式 |
416 | Requested range not satisfiable | 客户端请求的范围无效 |
417 | Expectation Failed | 服务器无法满足Expect的请求头信息 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
501 | Not Implemented | 服务器不支持请求的功能,无法完成请求 |
502 | Bad Gateway | 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 |
503 | Service Unavailable | 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 |
504 | Gateway Time-out | 充当网关或代理的服务器,未及时从远端服务器获取请求 |
505 | HTTP Version not supported | 服务器不支持请求的HTTP协议的版本,无法完成处理 |
四.ASCII编码
常见ASCII码的大小规则:0~9
Unicode编码:
定义:Unicode(统一码、万国码、单一码)是一种字符编码方案,它的原理是给每个字符分配一个唯一的代码点(code point),并为这些代码点指定一个在计算机中的标准表示方式。
UTF-8的特点是对不同范围的字符使用不同长度的编码。
UTF-16编码以16位无符号整数为单位。我们把Unicode编码记作U。前缀写为\u、%u。
UTF-32编码以32位无符号整数为单位。
五.URL基础知识
URL详解:URL(Uniform Resource Locator,统一资源定位器、定位地址,俗称网页地址,简称网址),是因特网上标准的资源地址,如同在网络上的门牌。
完整格式:[协议类型]://[用户名[:密码]]@[IP地址]:[端口号]/[资源层级UNIX文件路径][文件名]?[查询]#[片段ID]
URL的组成部分通常包括以下几个部分(尽管并非所有URL都会包含所有部分):
- 协议(或称为方案)
:这是URL的第一部分,它告诉浏览器如何与指定的资源进行通信。常见的协议有HTTP、HTTPS、FTP等。例如,https://表明接下来的URL将使用安全的HTTP协议进行通信。
- 用户名和密码(可选)
:在某些情况下,URL可能包含用于访问资源所需的用户名和密码,它们通过@符号与主机名分隔。但出于安全考虑,这种用法在现代Web应用中已不常见。
- 主机名(或IP地址)
:这是URL中指定资源所在服务器的名称或IP地址。在浏览器地址栏中,它通常是用户输入的域名(如www.example.com),但实际上,域名会通过DNS(域名系统)解析为服务器的IP地址。
- 端口号(可选)
:端口号用于区分同一台服务器上的不同服务。大多数协议都有默认端口号(如HTTP的默认端口号是80,HTTPS的默认端口号是443),因此通常不需要在URL中指定。如果使用了非默认端口号,则需要在主机名后通过冒号:指定。
- 路径
:路径部分指定了服务器上资源的具体位置。它可能是一个目录、文件或某种资源的名称。路径以/开头,后面跟着一系列的目录名和文件名,它们之间也用/分隔。
- 查询字符串(可选)
:查询字符串允许在URL中附加额外的参数,这些参数用于向服务器发送额外的信息或请求特定的数据。查询字符串通过?附加在URL的路径部分之后,参数之间通过&分隔。
- 片段标识符(也称为锚点,可选)
:片段标识符通过#附加在URL的末尾,它用于指定资源内部的一个位置(如HTML页面中的一个特定段落)。片段标识符仅由客户端(如浏览器)使用,不会发送给服务器。