Web基础
DNS 详解
DNS 是什么?
DNS(域名系统)提供了一种简单的方式,让我们在互联网上与设备通信,而无需记住复杂的数字。就像每栋房子都有一个唯一的地址用于直接发送邮件一样,互联网上的每台计算机都有其唯一的地址来与之通信,称为 IP 地址。IP 地址类似于 104.26.10.229,是由句点分隔的 4 组 0 - 255 之间的数字组成。当您想访问网站时,记住这组复杂的数字并不方便,而 DNS 可以提供帮助。因此,您无需记住 104.26.10.229,而是可以记住 tryhackme.com。
域名层次结构
域名层次结构指的是在域名系统(DNS)中域名的组织方式,它分为三个主要层级:
- 顶级域名(TLD):
- 这是域名最右边的部分,例如
.com
、.org
或.gov
。 - 顶级域名分为两种类型:通用顶级域名(gTLD) 和 国家代码顶级域名(ccTLD)。
- gTLD 历史上表示域名的用途,例如
.com
代表商业用途,.org
代表组织机构,.edu
代表教育机构,.gov
代表政府部门。现在,有许多新的 gTLD,例如.online
和.biz
。 - ccTLD 表示特定的地理区域,例如
.ca
代表加拿大,.co.uk
代表英国。
- 这是域名最右边的部分,例如
- 二级域名:
- 它位于顶级域名前面,例如在
tryhackme.com
中,tryhackme
是二级域名。二级域名在注册时通常受到字符和长度限制。
- 它位于顶级域名前面,例如在
- 子域名:
- 子域名位于二级域名前面,通过点号分隔,例如在
admin.tryhackme.com
中,admin
是子域名。 - 子域名可以有多个层次,例如
jupiter.servers.tryhackme.com
。
- 子域名位于二级域名前面,通过点号分隔,例如在
这一层次结构确保了互联网中网站的有序管理和访问。
DNS 记录类型
DNS 不仅仅适用于网站,还存在多种类型的 DNS 记录。我们将介绍一些您可能会遇到的最常见的记录类型。
A 记录
这些记录解析为 IPv4 地址,例如 104.26.10.229
AAAA 记录
这些记录解析为 IPv6 地址,例如 2606:4700:20::681a:be5
CNAME 记录
规范名称
这些记录解析为另一个域名,例如,TryHackMe 的在线商店具有子域名 store.tryhackme.com,该子域名返回 CNAME 记录 shops.shopify.com。然后将向 shops.shopify.com 发出另一个 DNS 请求,以确定 IP 地址。
MX 记录
邮件交换
这些记录解析为处理您正在查询的域的电子邮件的服务器地址,例如,tryhackme.com 的 MX 记录响应如下所示:alt1.aspmx.l.google.com。这些记录还带有优先级标志。这告诉客户端按什么顺序尝试服务器,如果主服务器出现故障并且需要将电子邮件发送到备份服务器,这非常完美。
TXT 记录
TXT 记录是自由文本字段,可以在其中存储任何基于文本的数据。TXT 记录有多种用途,但一些常见的用途是列出有权代表域发送电子邮件的服务器(这有助于对抗垃圾邮件和欺骗电子邮件)。它们还可以用于在注册第三方服务时验证域名所有权。
发出 DNS 请求
发出 DNS 请求时会发生什么
当您请求域名时,您的计算机首先检查其本地缓存,以查看您最近是否查找过该地址。如果没有,则会向您的递归 DNS 服务器发出请求。
递归 DNS 服务器通常由您的 ISP 提供,但您也可以选择自己的服务器。该服务器还具有最近查找的域名的本地缓存。如果在本地找到结果,则会将其发送回您的计算机,并且您的请求在此处结束(这对于流行的和大量请求的服务(如 Google、Facebook、Twitter)很常见)。如果无法在本地找到该请求,则开始查找正确答案的旅程,从 Internet 的根 DNS 服务器开始。
根服务器充当 Internet 的 DNS 主干。他们的工作是将您重定向到正确的顶级域服务器,具体取决于您的请求。例如,如果您请求 weasontang.github.io,则根服务器将识别 .io 的顶级域,并将您转到处理 .io 地址的正确 TLD 服务器。
TLD 服务器保存有关在哪里可以找到权威服务器来回答 DNS 请求的记录。权威服务器通常也称为域的名称服务器。例如,tryhackme.com 的名称服务器是 kip.ns.cloudflare.com 和 uma.ns.cloudflare.com。您通常会找到域名的多个名称服务器,以在其中一个服务器出现故障时充当备份。
权威 DNS 服务器是负责存储特定域名的 DNS 记录的服务器,也是对域名 DNS 记录进行任何更新的地方。根据记录类型,DNS 记录随后会发送回递归 DNS 服务器,其中本地副本将被缓存以供将来请求,然后中继回发出请求的原始客户端。DNS 记录都带有 **TTL(生存时间)**值。此值是以秒为单位表示的数字,应将响应本地保存该时间,直到您必须再次查找它为止。缓存可以节省每次与服务器通信时都发出 DNS 请求的麻烦。
生存时间 (TTL) 指的是数据包在被路由器丢弃之前在网络中存在的持续时间或“跃点数”。TTL 也用于其他上下文中,包括 CDN 缓存和 DNS 缓存。
实践
nslookup 是一个网络命令行工具,用于查询 DNS(域名系统)记录。 它可以帮助你查找域名对应的 IP 地址,或反查 IP 地址对应的域名,也可以用来调试 DNS 相关问题。
# What is the CNAME of shop.website.thm?
user@thm:~$ nslookup --type=CNAME shop.website.thm
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
shop.website.thm canonical name = shops.myshopify.com
# What is the value of the TXT record of website.thm?
user@thm:~$ nslookup --type=TXT website.thm
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
website.thm text = "THM{7012BBA60997F35A9516C2E16D2944FF}"
# What is the numerical priority value for the MX record?
user@thm:~$ nslookup --type=MX website.thm
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
website.thm mail exchanger = 30 alt4.aspmx.l.google.com
# What is the IP address for the A record of www.website.thm?
user@thm:~$ nslookup --type=A website.thm
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: website.thm
Address: 10.10.10.10
HTTP 详解
什么是 HTTP(S)?
超文本传输协议 (HTTP) 是一种协议,用于指定 Web 浏览器和 Web 服务器如何通信。
什么是 HTTP?(超文本传输协议)
每当您查看网站时都会使用 HTTP,由 Tim Berners-Lee 及其团队在 1989 年至 1991 年间开发。HTTP 是一组用于与 Web 服务器通信以传输网页数据(无论是 HTML、图像、视频等)的规则。
什么是 HTTPS?(安全超文本传输协议)
HTTPS 是 HTTP 的安全版本。HTTPS 数据已加密,因此它不仅可以阻止人们看到您接收和发送的数据,还可以确保您与正确的 Web 服务器而不是冒充它的服务器进行通信。
请求和响应
当我们访问网站时,您的浏览器需要向 Web 服务器发出请求,以获取 HTML、图像等资产并下载响应。在此之前,您需要具体告诉浏览器如何以及在何处访问这些资源,这就是 URL 将提供帮助的地方。
什么是 URL?(统一资源定位符)
如果您使用过 Internet,那么您之前一定使用过 URL。URL 主要是一个关于如何访问 Internet 上资源的指令。下图显示了 URL 的外观及其所有功能(并非每个请求都使用所有功能)。
- Scheme: 这指示使用什么协议来访问资源,例如 HTTP、HTTPS、FTP(文件传输协议)。
- User: 某些服务需要身份验证才能登录,您可以将用户名和密码放入 URL 中以登录。
- Host: 您希望访问的服务器的域名或 IP 地址。
- Port: 您要连接的端口,HTTP 通常为 80,HTTPS 通常为 443,但它可以托管在 1 - 65535 之间的任何端口上。
- Path: 您尝试访问的资源的文件名或位置。
- Query String: 可以发送到请求路径的额外信息位。例如,/blog?id=1 会告诉博客路径您希望接收 id 为 1 的博客文章。
- Fragment: 这是对所请求实际页面上某个位置的引用。这通常用于内容较长的页面,并且可以直接链接到页面的某个部分,以便用户在访问页面后立即可以查看该部分。
发出请求
只需一行 GET / HTTP/1.1 即可向 Web 服务器发出请求
但是为了获得更丰富的 Web 体验,您还需要发送其他数据。此其他数据在所谓的标头中发送,其中标头包含要提供给您正在与之通信的 Web 服务器的额外信息,但我们将在标头任务中对此进行更多介绍。
HTTP 方法
HTTP 方法是客户端在发出 HTTP 请求时显示其预期操作的一种方式。HTTP 方法有很多,但我们将介绍最常见的方法,尽管您主要处理 GET 和 POST 方法。
GET 请求
这用于从 Web 服务器获取信息。
POST 请求
这用于将数据提交到 Web 服务器并可能创建新记录
PUT 请求
这用于将数据提交到 Web 服务器以更新信息
DELETE 请求
这用于从 Web 服务器删除信息/记录。
HTTP 状态代码
在上一个任务中,您了解到当 HTTP 服务器响应时,第一行始终包含一个状态代码,告知客户端其请求的结果以及如何处理它。这些状态代码可以分为 5 个不同的范围:
状态代码 | 描述 |
---|---|
100-199 - 信息响应 | 发送这些信息是为了告诉客户端他们的请求的第一部分已被接受,他们应该继续发送其余的请求。这些代码不再很常见。 |
200-299 - 成功 | 此范围的状态代码用于告诉客户端他们的请求已成功。 |
300-399 - 重定向 | 这些用于将客户端的请求重定向到另一个资源。这可以是重定向到不同的网页或完全不同的网站。 |
400-499 - 客户端错误 | 用于通知客户端他们的请求存在错误。 |
500-599 - 服务器错误 | 这是为服务器端发生的错误保留的,通常表示服务器处理请求时存在相当大的问题。 |
常见的 HTTP 状态代码:
有很多不同的 HTTP 状态代码,这还不包括应用程序甚至可以定义自己的状态代码,我们将介绍您可能遇到的最常见的 HTTP 响应:
状态代码 | 描述 |
---|---|
200 - 确定 | 请求已成功完成。 |
201 - 已创建 | 已创建资源(例如,新用户或新博客文章)。 |
301 - 永久移动 | 这会将客户端的浏览器重定向到新的网页,或者告诉搜索引擎该页面已移动到其他位置并应改为在那里查找。 |
302 - 已找到 | 与上面的永久重定向类似,但顾名思义,这只是一个临时更改,将来可能会再次更改。 |
400 - 错误的请求 | 这告诉浏览器他们的请求中存在错误或缺少某些内容。如果正在请求的 Web 服务器资源需要客户端未发送的某个参数,有时可以使用此代码。 |
401 - 未授权 | 在您使用 Web 应用程序授权之前,您当前不允许查看此资源,最常见的是使用用户名和密码授权。 |
403 - 禁止 | 无论您是否已登录,您都无权查看此资源。 |
405 - 方法不允许 | 该资源不允许此方法请求,例如,您向资源 /create-account 发送 GET 请求,而该资源期望的是 POST 请求。 |
404 - 找不到页面 | 您请求的页面/资源不存在。 |
500 - 内部服务错误 | 服务器遇到了某种无法正确处理的请求错误。 |
503 - 服务不可用 | 此服务器无法处理您的请求,因为它已过载或正在维护中。 |
标头
标头是在发出请求时可以发送到 Web 服务器的额外数据位。
尽管在发出 HTTP 请求时严格来说不需要任何标头,但您会发现很难正确查看网站。
常见的请求标头
这些标头是从客户端(通常是您的浏览器)发送到服务器的标头。
- Host: 某些 Web 服务器托管多个网站,因此通过提供主机标头,您可以告诉它您需要哪个网站,否则您只会收到服务器的默认网站。
- User-Agent: 这是您的浏览器软件和版本号,告诉 Web 服务器您的浏览器软件可以帮助它正确地为您的浏览器设置网站格式,并且某些 HTML、JavaScript 和 CSS 元素仅在某些浏览器中可用。
- Content-Length: 当将数据发送到 Web 服务器(例如在表单中)时,内容长度会告诉 Web 服务器在 Web 请求中期望多少数据。这样,服务器可以确保它没有丢失任何数据。
- Accept-Encoding: 告诉 Web 服务器浏览器支持哪些类型的压缩方法,以便可以减小数据的大小,以便通过 Internet 传输。
- Cookie: 发送到服务器以帮助记住您的信息的数据(有关更多信息,请参阅 Cookie 任务)。
常见的响应标头
这些是在发出请求后从服务器返回到客户端的标头。
- Set-Cookie: 要存储的信息,每次请求时都会发送回 Web 服务器(有关更多信息,请参阅 Cookie 任务)。
- Cache-Control: 在浏览器再次请求之前,将响应内容存储在浏览器缓存中的时间。
- Content-Type: 这告诉客户端正在返回什么类型的数据,即 HTML、CSS、JavaScript、图像、PDF、视频等。使用 content-type 标头,浏览器就知道如何处理数据。
- Content-Encoding: 用于压缩数据以在通过 Internet 发送时减小其大小的方法。
Cookies
您可能以前听说过 Cookie,它们只是存储在您计算机上的一小段数据。当您收到来自 Web 服务器的“Set-Cookie”标头时,会保存 Cookie。然后,您发出的每个进一步的请求都会将 Cookie 数据发送回 Web 服务器。因为 HTTP 是无状态的(不跟踪您以前的请求),所以 Cookie 可用于提醒 Web 服务器您是谁、网站的一些个人设置或您以前是否访问过该网站。让我们看一个例子 HTTP 请求:
Cookie 可用于多种用途,但最常用于网站身份验证。Cookie 值通常不是您可以查看密码的明文字符串,而是一个令牌(不易被人猜测的唯一密钥代码)。
查看您的 Cookie
您可以使用浏览器中的开发者工具轻松查看浏览器发送到网站的 Cookie。
打开开发者工具后,单击“网络”选项卡。此选项卡将向您显示浏览器已请求的所有资源的列表。您可以单击每个资源以接收请求和响应的详细细目分类。如果您的浏览器发送了 Cookie,您将在请求的“Cookie”选项卡上看到这些 Cookie。
网站如何工作
要利用网站,您首先需要知道它们是如何创建的。
网站如何工作
在本教程结束时,您将了解网站是如何创建的,并将被介绍一些基本的安全问题。
当您访问网站时,您的浏览器(如 Safari 或 Google Chrome)会向 Web 服务器发出请求,询问有关您正在访问的页面的信息。它将响应您的浏览器用于向您显示页面的数据;Web 服务器只是世界其他地方的一台专用计算机,用于处理您的请求。
构成网站的两个主要组件:
前端(客户端)- 浏览器呈现网站的方式。
后端(服务器端)- 处理您的请求并返回响应的服务器。
浏览器向 Web 服务器发出请求涉及许多其他过程,但现在,您只需要了解您向服务器发出请求,服务器会响应浏览器用于向您呈现数据的数据。
HTML
网站主要使用以下内容创建:
- HTML,用于构建网站并定义其结构
- CSS,通过添加样式选项使网站看起来更漂亮
- JavaScript,使用交互性在页面上实现复杂的功能
超文本标记语言 (HTML) 是网站编写所用的语言。元素(也称为标签)是 HTML 页面的构建块,并告诉浏览器如何显示内容。下面的代码片段显示了一个简单的 HTML 文档,其结构与每个网站的结构相同:
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<h1>Example Heading</h1>
<p>Example paragraph..</p>
</body>
</html>
HTML 结构(如屏幕截图所示)具有以下组件:
- <!DOCTYPE html> 定义该页面是 HTML5 文档。这有助于跨不同浏览器的标准化,并告诉浏览器使用 HTML5 解释该页面。
- <html> 元素是 HTML 页面的根元素 - 所有其他元素都位于此元素之后。
- <head> 元素包含有关页面的信息(例如页面标题)
- <body> 元素定义 HTML 文档的正文;只有正文中的内容才会显示在浏览器中。
- <h1> 元素定义一个大标题
- <p> 元素定义一个段落
- 有许多其他元素(标签)用于不同的目的。例如,有用于按钮 ( <button>) 、图像 ( <img>) 、列表等的标签。
标签可以包含属性,例如 class 属性(可用于设置元素的样式(例如,使标签具有不同的颜色) <p class="bold-text">)或 src 属性(用于在图像上指定图像的位置:<img src="img/cat.jpg">)。一个元素可以有多个属性,每个属性都有其独特的用途,例如 <p attribute1="value1" attribute2="value2">。
元素还可以具有 id 属性 ( <p id="example">),该属性对于该元素是唯一的。与多个元素可以使用相同类的 class 属性不同,元素必须具有不同的 id 才能唯一标识它们。元素 id 用于样式设置以及通过 JavaScript 标识它。
您可以通过右键单击并选择“查看页面源代码”(Chrome)/“显示页面源代码”(Safari)来查看任何网站的 HTML。
JavaScript
JavaScript (JS) 是世界上最流行的编码语言之一,它允许页面具有交互性。HTML 用于创建网站结构和内容,而 JavaScript 用于控制网页的功能 - 如果没有 JavaScript,页面将不具有交互元素,并且始终是静态的。JS 可以实时动态更新页面,从而使页面具有在页面上发生特定事件(例如,用户单击按钮)时更改按钮样式的能力或显示移动动画。
JavaScript 添加在页面源代码中,可以加载在 <script> 标记中,也可以使用 src 属性远程包含:<script src="/location/of/javascript_file.js"></script>
以下 JavaScript 代码查找页面上 id 为“demo”的 HTML 元素,并将该元素的内容更改为“Hack the Planet”:document.getElementById("demo").innerHTML = "Hack the Planet";
HTML 元素还可以具有事件,例如“onclick”或“onhover”,这些事件会在事件发生时执行 JavaScript。以下代码将 ID 为 demo 的元素的文本更改为“Button Clicked”:<button onclick='document.getElementById("demo").innerHTML = "Button Clicked";'>Click Me!</button> - onclick 事件也可以在 JavaScript 脚本标记内定义,而不是直接在元素上定义。
敏感数据泄露
当网站没有正确保护(或删除)最终用户的敏感明文信息时,会发生敏感数据泄露;通常在网站的前端源代码中找到。
我们现在知道网站是使用许多 HTML 元素(标签)构建的,我们只需“查看页面源代码”即可看到所有这些元素。网站开发人员可能忘记删除登录凭据、隐藏指向网站私有部分的链接或 HTML 或 JavaScript 中显示的其他敏感数据。
<!DOCTYPE html>
<html>
<head>
<title>Fake Website</title>
</head>
<body>
<form>
<input type="text" name="username" />
<input type="password" name="password" />
<button>Login</button>
<!-- TODO: remove test credentials admin:password123 -->
</form>
</body>
</html>
敏感信息可能会被用来进一步扩大攻击者在 Web 应用程序的不同部分中的访问权限。例如,可能存在包含临时登录凭据的 HTML 注释,如果您查看页面的源代码并找到这些注释,则可以使用这些凭据在应用程序的其他位置登录(或者更糟糕的是,用于访问网站的其他后端组件)。
每当您评估 Web 应用程序是否存在安全问题时,您应该做的第一件事是查看页面源代码,看看是否可以找到任何公开的登录凭据或隐藏的链接。
HTML 注入
当未经过滤的用户输入显示在页面上时,会发生 HTML 注入漏洞。如果网站未能清理用户输入(过滤用户输入到网站中的任何“恶意”文本),并且该输入用于页面上,则攻击者可以将 HTML 代码注入到易受攻击的网站中。
输入清理对于保持网站安全非常重要,因为用户输入到网站中的信息通常用于其他前端和后端功能中。您将在另一个实验中探索的一个漏洞是数据库注入,您可以通过控制直接用于查询的输入来操纵数据库查找查询以登录为另一个用户 - 但现在,让我们专注于 HTML 注入(客户端)。
当用户可以控制如何显示其输入时,他们可以提交 HTML(或 JavaScript)代码,并且浏览器将在页面上使用它,从而允许用户控制页面的外观和功能。
上图显示了表单如何将文本输出到页面。用户在“你的名字是什么”字段中输入的任何内容都将传递到 JavaScript 函数并输出到页面,这意味着如果用户在该字段中添加他们自己的 HTML 或 JavaScript,它将在 sayHi 函数中使用并添加到页面中 - 这意味着您可以添加您自己的 HTML(例如 <h1> 标签),它会将您的输入输出为纯 HTML。
一般规则是永远不要信任用户输入。为了防止恶意输入,网站开发人员应该在 JavaScript 函数中使用用户输入的所有内容之前对其进行清理;在这种情况下,开发人员可以删除任何 HTML 标签。
整合在一起
了解 Web 的所有各个组件如何协同工作,使您可以访问您最喜欢的网站。
整合在一起
从前面的模块中,您将了解到当您在浏览器中请求网页时,幕后会发生很多事情。
总而言之,当您请求网站时,您的计算机需要知道它需要与之通信的服务器的 IP 地址;为此,它使用 DNS。然后,您的计算机使用一组称为 HTTP 协议的特殊命令与 Web 服务器进行通信;然后,Web 服务器会返回 HTML、JavaScript、CSS、图像等,然后您的浏览器会使用这些内容来正确设置网站格式并将其显示给您。
还有一些其他组件可以帮助 Web 更有效地运行并提供额外的功能。
其他组件
负载均衡器
当网站的流量开始变得非常大或正在运行需要高可用性的应用程序时,一台 Web 服务器可能不再能够胜任这项工作。负载均衡器提供两个主要功能:确保高流量网站可以处理负载,以及在服务器无响应时提供故障转移。当您请求带有负载均衡器的网站时,负载均衡器将首先接收您的请求,然后将其转发到其后面的多个服务器之一。负载均衡器使用不同的算法来帮助它确定哪个服务器最适合处理请求。这些算法的几个示例是轮询,它依次将其发送到每个服务器,或者加权,它检查服务器当前处理的请求数,并将其发送到最不繁忙的服务器。
负载均衡器还定期检查每个服务器,以确保它们正常运行;这称为运行状况检查。如果服务器未正确响应或未响应,则负载均衡器将停止发送流量,直到它再次正确响应为止。
CDN(内容分发网络)
CDN 可能是减少繁忙网站流量的绝佳资源。它允许您托管网站的静态文件,例如 JavaScript、CSS、图像、视频,并将它们托管在世界各地成千上万台服务器上。当用户请求其中一个托管文件时,CDN 会计算出物理上最近的服务器的位置,并将请求发送到该服务器,而不是可能发送到世界另一端的服务器。
数据库
通常,网站需要一种存储其用户信息的方式。Web 服务器可以与数据库通信,以存储和调用其中的数据。数据库的范围可以从简单的纯文本文件到提供速度和弹性的多个服务器的复杂集群。您会遇到一些常见的数据库:MySQL、MSSQL、MongoDB、Postgres 等;每个数据库都有其特定的功能。
WAF(Web 应用程序防火墙)
WAF 位于您的 Web 请求和 Web 服务器之间;其主要目的是保护 Web 服务器免受黑客攻击或拒绝服务攻击。它分析 Web 请求中是否存在常见的攻击技术,以及请求是否来自真正的浏览器而不是机器人。它还会检查是否每秒从 IP 发送过多的 Web 请求,方法是利用称为速率限制的功能,该功能每秒仅允许来自一个 IP 的一定数量的请求。如果请求被认为是潜在的攻击,它将被丢弃,并且永远不会发送到 Web 服务器。
Web 服务器的工作原理
什么是 Web 服务器?
Web 服务器是一种侦听传入连接,然后利用 HTTP 协议向其客户端传递 Web 内容的软件。您会遇到的最常见的 Web 服务器软件是 Apache、Nginx、IIS 和 NodeJS。Web 服务器从所谓的根目录传递文件,该目录在软件设置中定义。例如,Nginx 和 Apache 共享 /var/www/html 在 Linux 操作系统中的相同默认位置,而 IIS 使用 C:\inetpub\wwwroot 用于 Windows 操作系统。因此,例如,如果您请求文件 http://www.example.com/picture.jpg,它将从其本地硬盘驱动器发送文件 /var/www/html/picture.jpg。
虚拟主机
Web 服务器可以使用不同的域名托管多个网站;为此,它们使用虚拟主机。Web 服务器软件检查从 HTTP 标头请求的主机名,并将其与虚拟主机进行匹配(虚拟主机只是基于文本的配置文件)。如果找到匹配项,将提供正确的网站。如果找不到匹配项,将改为提供默认网站。
虚拟主机的根目录可以映射到硬盘驱动器上的不同位置。例如,one.com 映射到 /var/www/website_one,而 two.com 映射到 /var/www/website_two
您可以托管在 Web 服务器上的不同网站的数量没有限制。
静态与动态内容
顾名思义,静态内容是永远不会更改的内容。常见的示例包括图片、JavaScript、CSS 等,但也包括永远不会更改的 HTML。此外,这些文件直接从 Web 服务器提供,而未对其进行任何更改。
另一方面,动态内容是可能随不同请求而更改的内容。以博客为例。在博客的主页上,它将向您显示最新的条目。如果创建了一个新条目,则主页将使用最新的条目进行更新,或者第二个示例可能是博客上的搜索页面。根据您搜索的词,将显示不同的结果。
对您最终看到的内容的这些更改是在所谓的后端使用编程和脚本语言完成的。之所以称为后端,是因为所做的事情都是在幕后完成的。您无法查看网站的 HTML 源代码并查看后端发生的情况,而 HTML 是后端处理的结果。您在浏览器中看到的所有内容都称为前端。
脚本和后端语言
后端语言可以实现的目标没有太大的限制,这些语言使网站对用户具有交互性。这些语言的一些示例(不按特定顺序排列 :p)是 PHP、Python、Ruby、NodeJS、Perl 等等。这些语言可以与数据库交互、调用外部服务、处理来自用户的数据等等。一个非常基本的 PHP 示例是如果您请求网站 http://example.com/index.php?name=adam
如果 index.php 的构建方式如下:
<html><body>Hello <?php echo $_GET["name"]; ?></body></html>
它会将以下内容输出到客户端:
<html><body>Hello adam</body></html>
您会注意到客户端看不到任何 PHP 代码,因为它在后端。这种交互性为未安全创建的 Web 应用程序打开了更多的安全问题,正如您在其他模块中所了解的那样。
常见问题解答
什么是 DNS?
DNS(域名系统)提供了一种简单的方式,让我们在互联网上与设备通信,而无需记住复杂的数字。它将域名(例如 tryhackme.com)转换为 IP 地址(例如 104.26.10.229)。
什么是域名层次结构?
域名层次结构分为三个主要层级:顶级域名(TLD)、二级域名和子域名。例如,在 admin.tryhackme.com
中,.com
是 TLD,tryhackme
是二级域名,admin
是子域名。
常见的 DNS 记录类型有哪些?
常见的 DNS 记录类型包括 A 记录(IPv4 地址)、AAAA 记录(IPv6 地址)、CNAME 记录(规范名称)、MX 记录(邮件交换)和 TXT 记录(自由文本)。
什么是 HTTP?
HTTP(超文本传输协议)是一种协议,用于指定 Web 浏览器和 Web 服务器如何通信。HTTPS 是 HTTP 的安全版本,数据已加密。
什么是 URL?
URL(统一资源定位符)是一个关于如何访问 Internet 上资源的指令。它包括方案(例如 HTTP、HTTPS)、主机(域名或 IP 地址)、端口、路径、查询字符串和片段。
常见的 HTTP 方法有哪些?
常见的 HTTP 方法包括 GET(获取信息)、POST(提交数据)、PUT(更新信息)和 DELETE(删除信息)。
常见的 HTTP 状态代码有哪些?
常见的 HTTP 状态代码包括 200(成功)、201(已创建)、301(永久移动)、302(已找到)、400(错误的请求)、401(未授权)、403(禁止)、404(找不到页面)、500(内部服务错误)和 503(服务不可用)。
什么是 Cookie?
Cookie 是一小段数据,存储在您的计算机上,用于提醒 Web 服务器您是谁、网站的一些个人设置或您以前是否访问过该网站。
网站是如何创建的?
网站主要使用 HTML(构建结构)、CSS(添加样式)和 JavaScript(实现交互性)创建。
什么是敏感数据泄露?
当网站没有正确保护(或删除)最终用户的敏感明文信息时,会发生敏感数据泄露,通常在网站的前端源代码中找到。
什么是 HTML 注入?
当未经过滤的用户输入显示在页面上时,会发生 HTML 注入漏洞。攻击者可以将 HTML 代码注入到易受攻击的网站中。