Menu
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

网络安全 Web 应用


Web 应用几乎是我们所有行为的基础,无论是访问互联网还是远程控制你的割草机。在本入门课程中,我们将介绍 Web 应用安全的基础知识。


HTTP 协议

HTTP 是载体协议,它允许我们的浏览器和应用程序接收诸如 HTML(“超文本标记语言”)、CSS(“层叠样式表”)、图像和视频等内容。


URL、查询参数和方案

要访问 Web 应用,我们使用 URL(“统一资源定位器”),例如:https://www.google.com/search?q=w3schools+cyber+security&ie=UTF-8

google.com 的 URL 包含一个域名、一个被访问的脚本和查询参数。

我们正在访问的脚本称为 /search。/ 表示它包含在服务器上提供文件的顶层目录中。? 表示脚本的输入参数,& 用于分隔不同的输入参数。在我们的 URL 中,输入参数是

  • q,其值为 w3schools cyber security
  • ie,其值为 UTF-8

这些输入的含义由 Web 服务器应用程序来确定。

有时你会看到 / 或 /?,表明已经设置了一个脚本来响应此地址。通常,这个脚本类似于一个索引文件,它会捕获所有请求,除非指定了特定的脚本。

方案定义了要使用的协议。在本例中,它是 URL 的第一部分:https。当 URL 中未定义方案时,它允许应用程序决定要使用什么。方案可以包括一系列协议,例如

  • HTTP
  • HTTPS
  • FTP
  • SSH
  • SMB

HTTP 头

HTTP 协议使用许多头,其中一些是应用程序自定义的,而另一些则是技术定义并认可的。

向 http://google.com 发出的示例请求

GET /search?q=w3schools+cyber+security&ie=UTF-8 HTTP/1.1
Host: google.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Accept: image/avif,image/webp,image/apng,image/*,*/*;q=0.8
Referer: https://w3schools.com/
Accept-Encoding: gzip, deflate
Cookie: cookie1=value1;cookie2=value2

请求头指定了客户端希望在目标 Web 服务器上执行的操作。它还包含有关是否接受压缩、访问客户端的类型以及服务器告知客户端提供的任何 Cookie 的信息。HTTP 请求头在此处进行了解释

解释
GET /search... HTTP/1.1 GET 是我们用来访问应用程序的动词。在 HTTP 动词部分进行了详细解释。我们还看到了路径和查询参数以及 HTTP 版本
Host: google.com 此头指示我们想要使用的目标服务。服务器可以拥有多个服务,如 VHOSTS 部分所述。
User-Agent 客户端应用程序,大多数情况下是浏览器,可以使用版本、引擎和操作系统进行识别
Accept 定义了客户端可以接受的内容
Referer: https://w3schools.com/ Referer
Accept-Encoding: gzip, deflate 如果客户端单击了来自不同网站的链接,则 Referer 头用于表明客户端来自哪里
Accept-Encoding 内容是否可以压缩或编码?这定义了我们能接受什么

Cookie

Cookie 是服务器在先前的请求中发送的值,客户端会在每个后续请求中将其发送回来。在状态部分进行了详细解释
使用此请求,服务器将使用头和内容进行回复。以下是一些示例头
HTTP/1.1 200 OK
Content-Type: text/html

Set-Cookie: <cookie value>

解释
Cookie 是服务器在先前的请求中发送的值,客户端会在每个后续请求中将其发送回来。在状态部分进行了详细解释 <website content>
使用此请求,服务器将使用头和内容进行回复。以下是一些示例头 响应头和内容决定了我们在浏览器中看到的内容。HTTP 响应头解释如下
HTTP 响应代码。在 HTTP 响应代码部分进行了详细解释 指定了返回的内容类型,例如 HTML、JSON 或 XML

Set-Cookie

客户端应记住并在下次请求中返回的任何特殊值

HTTP 动词 当访问 Web 应用时,客户端会收到有关如何将数据发送到 Web 应用的说明。应用程序可以接受许多动词。
!动词 用途
GET 通常用于通过查询参数检索值
POST 用于通过发送到 Web 服务器的请求主体中的值将数据发送到脚本。通常,它涉及创建、上传或发送大量数据
PUT 通常用于上传或将数据写入 Web 服务器
DELETE 指示应删除的资源

PATCH


可用于使用新值更新资源

这些动词根据 Web 应用的要求使用。RESTful(REST)Web 服务特别善于使用所有 HTTP 动词来定义应在后端执行的操作。

HTTP 响应代码 解释
200 运行在 Web 服务器上的应用程序可以根据服务器端发生的情况使用不同的代码进行响应。下面列出了 Web 服务器会向客户端发出的常见响应代码,安全专业人员应了解这些代码
301 代码
302 应用程序正常返回
400 服务器要求客户端永久记住重定向到客户端应访问的新位置
403 临时重定向。客户端无需保存此回复
404 客户端发出了无效请求
500 客户端无权访问此资源。需要授权

客户端试图访问不存在的资源

服务器在尝试满足请求时出错

REST

REST 服务,有时也称为 RESTful 服务,利用 HTTP 动词和 HTTP 响应代码的全部力量来促进 Web 应用的使用。RESTful 服务通常使用 URL 的部分作为查询参数来确定 Web 应用上的操作。REST 通常由 API(“应用程序编程接口”)使用。

REST URL 将根据 URL 的不同元素调用功能。

REST URL 示例:http://example.com/users/search/w3schools 此 URL 将调用 URL 中的功能而不是查询参数。我们可以将 URL 解释为
参数 注释
users 访问功能的 users 部分
search 访问搜索功能

w3schools

要搜索的用户

HTTP Sessions

会话与状态

  • HTTP 中没有内置的方法来识别返回的访问者。为了让 Web 服务器识别用户,必须在每个请求中将一个秘密值传递到客户端并从客户端返回。这通常通过头中的 Cookie 完成,但其他方法也很常见,例如通过 GET 和 POST 参数或其他头。不建议通过 GET 参数传递状态,因为这些参数通常会记录在服务器上或中间机构(如代理)中。
  • 以下是一些常见的 Cookie 示例,它们允许 Web 服务器上的应用程序控制会话和状态
  • PHPSESSID

JSESSIONID

  • ASP.NET_SessionID
  • 这些值代表服务器上的特定状态,通常称为会话。此状态表示诸如以下内容

您以哪个用户身份登录

权限和授权

  • 重要的是,发送到客户端的会话值不能轻易被他人猜测或识别。如果他们可以这样做,攻击者就可以冒充其他用户访问 Web 应用。
  • 状态也可以保存在客户端上。这涉及服务器将所有状态发送到客户端,并依赖于客户端将所有项目发送回来。这种实现依赖于加密来检查客户端声称的状态的完整性。使用此方法的实现示例如下

JWT(“JSON Web 令牌”)

Developer Console

ASP.Net ViewState

您正在使用 Cookie 学习这门课程!您可以通过打开开发人员工具在 Web 浏览器中检查这些 Cookie。这可以通过在浏览器中按 F12 来完成,打开开发人员工具窗口。在此窗口中,您应该能够找到 Cookie 存储的正确位置。 

在 Google Chrome 中,Cookie 在上面的应用程序选项卡中被识别出来。 

注意:你能想到为什么屏幕截图中已将 Cookie 遮盖,因此您无法读取它们吗?

Virtual Hosts


虚拟主机

一个 Web 服务器可以通过虚拟主机(通常缩写为 Vhosts)处理多个应用程序。为了方便访问其他虚拟主机,Web 服务器通常会从客户端请求的 Host 头读取信息,并根据此值将请求发送到正确的应用程序。

URL 编码

  • 为了让应用程序能够安全地在服务器和客户端之间传输内容,必须对某些字符进行编码,以确保它们不会影响协议。为了保持通信的完整性,使用 URL 编码。
  • URL 编码将不安全的字符替换为 % 和两个十六进制数字。例如
  • 百分号替换为 %25

空格替换为 %20

注意: 使用 Cyber Chef 工具尝试解码以下 URL 编码字符,看看你能否揭示其中的信息: %48 %66 %6c %6c %6f %20 %64 %65 %61 %72 %20 %77 %33 %73 %63 %68 %6f %6f %6c %73 %20 %73 %74 %75 %64 %65 %6e %74 %2e %20 %48 %6f %70 %65 %20 %79 %6f %75 %20 %61 %72 %65 %20 %6c %65 %61 %72 %6e %69 %6e %67 %20 %73 %6f %6d %65 %74 %68 %69 %6e %67 %20 %74 %6f %64 %61 %79 %21

JavaScript

为了支持动态内容,浏览器使用脚本语言 JavaScript。这使得开发人员能够编写在客户端运行的解决方案,从而实现更具交互性和“活力”的 Web 内容。

JavaScript 也参与了许多针对 Web 应用程序和客户端应用程序(如浏览器)的攻击。


使用 TLS 加密

HTTP 协议本身不支持传输中的数据加密,因此需要在 HTTP 之上添加一层封装来提供加密支持。这在 HTTP 后面添加一个字母 "S" 来表示,即 HTTPS。

过去使用的加密协议是 SSL(“安全套接层”),但现在已弃用。取而代之的是通常使用 TLS(“传输层安全”)来强制加密。



×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.