菜单
×
   ❮   
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 服务器的应用程序决定。

有时您只会看到 / 或 /?,表示已设置脚本以响应此地址。通常,此脚本是像 index 文件这样的东西,它会捕获所有请求,除非指定了特定脚本。

协议定义了要使用的协议。在我们的例子中,它是 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 请求标头在此处进行了解释

Header Explanation
GET /search... HTTP/1.1 GET 是我们用于访问应用程序的动词。在 HTTP 动词部分有详细解释。我们还看到了路径、查询参数和 HTTP 版本
Host: google.com 此标头指示我们要使用的目标服务。服务器可以拥有多个服务,如 VHOSTS 部分所述。
User-Agent 客户端应用程序(大多数情况下是浏览器)可以识别自己,包括版本、引擎和操作系统
Accept 定义客户端可以接受的内容
Referer: https://w3schools.com/ 如果客户端从其他网站点击了链接,则会使用 Referer 标头来说明客户端来自何处
Accept-Encoding: gzip, deflate 内容可以被压缩或编码吗?这定义了我们可以接受什么
Cookie Cookie 是服务器在前几次请求中发送的值,客户端在每个后续请求中都会将其发送回来。在 State 部分有详细解释

通过此请求,服务器将使用标头和内容进行响应。下面的示例标头

HTTP/1.1 200 OK
Content-Type: text/html
Set-Cookie: <cookie value>
<website content>

响应标头和内容决定了我们将在浏览器中看到的内容。HTTP 响应标头解释如下

Header Explanation
HTTP/1.1 200 OK HTTP 响应代码。在 HTTP 响应代码部分有详细解释
Content-Type: text/html 指定返回内容的类型,例如 HTML、JSON 或 XML
Set-Cookie 客户端应记住并在下一个请求中返回的任何特殊值

HTTP 动词

访问 Web 应用程序时,客户端会收到如何将数据发送到 Web 应用程序的指示。应用程序可以接受许多动词。

!动词 用于
GET 通常用于通过查询参数检索值
POST 用于通过发送到 Web 服务器的请求正文中的值将数据发送到脚本。通常涉及创建、上传或发送大量数据
PUT 通常用于将数据上传或写入 Web 服务器
DELETE 指示应删除的资源
PATCH 可用于使用新值更新资源

这些根据 Web 应用程序的要求使用。Restful (REST) Web 服务特别擅长使用完整的 HTTP 动词数组来定义后端应执行的操作。


HTTP 响应代码

Web 服务器上的应用程序可以根据服务器端发生的情况返回不同的代码。以下是 Web 服务器将向客户端发出的常见响应代码,安全专业人员应了解这些代码

代码 Explanation
200 应用程序正常返回
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 中没有内置的方法可以让服务器识别返回的访问者。要让 Web 服务器识别用户,必须在每个请求中与客户端之间传递一个秘密值。这通常通过标头中的 Cookie 来完成,但其他方式也很常见,例如通过 GET 和 POST 参数或其他标头。不建议通过 GET 参数传递状态,因为这些参数通常会在服务器或代理等中间件中记录。

HTTP Sessions

以下是一些常见的 Cookie 示例,允许 Web 服务器上的应用程序控制会话和状态

  • PHPSESSID
  • JSESSIONID
  • ASP.NET_SessionID

这些值代表服务器上的特定状态,通常称为会话。此状态表示例如

  • 您已登录为哪个用户
  • 权限和授权

重要的是,发送给客户端的会话值不能轻易被猜到或被他人识别。如果可以,攻击者就可以冒充 Web 应用程序上的其他用户。

状态也可以保存在客户端。这涉及到服务器将所有状态发送给客户端,并依赖客户端将所有项目发回。此类实现依赖于加密来检查客户端声称的状态的完整性。下面列出了使用此实现的示例

  • JWT(“JSON Web Tokens”)
  • ASP.Net ViewState

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

Developer Console

在 Google Chrome 中,Cookie 在上面的 Application 标签中进行了标识。 

注意:您能想到为什么屏幕截图中的 Cookie 被隐藏起来,以便您无法阅读它们吗?

虚拟主机

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

Virtual Hosts


URL 编码

为了使应用程序能够安全地在服务器和客户端之间传输内容,必须对某些字符进行编码,以确保它们不会影响协议。为了保持通信的完整性,使用了 URL 编码。

URL 编码使用 % 和两个十六进制数字替换不安全字符。例如

  • 百分号替换为 %25
  • 空格替换为 %20
  • 引号替换为 %22

一个进行文本分析和运行 URL 解码等操作的优秀工具是 CyberChef。您可以在此处尝试在浏览器中打开它:https://gchq.github.io/CyberChef/

注意:玩转 Cyber Chef,看看您是否能揭示以下 URL 编码字符消息的含义:%48 %65 %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(“传输层安全”)来强制执行加密。



×

联系销售

如果您想将 W3Schools 服务用于教育机构、团队或企业,请发送电子邮件给我们
sales@w3schools.com

报告错误

如果您想报告错误,或想提出建议,请发送电子邮件给我们
help@w3schools.com

W3Schools 经过优化,旨在方便学习和培训。示例可能经过简化,以提高阅读和学习体验。教程、参考资料和示例会不断审查,以避免错误,但我们无法保证所有内容的完全正确性。使用 W3Schools 即表示您已阅读并接受我们的使用条款Cookie 和隐私政策

版权所有 1999-2024 Refsnes Data。保留所有权利。W3Schools 由 W3.CSS 提供支持