HTTP 基础知识
超文本传输协议(HTTP)是一种应用层协议。从表面上看,HTTP 看起来非常简单,但考虑到它在不一致的浏览器和服务器上的使用,存在很多问题。
分解 HTTP 请求
对于每个请求,我们通常有:
A request lineHeadersA body (optional)从上面的示例来看,请求行是请求中的第一行,它告诉我们 HTTP 方法 (GET)、请求的 URI (/api/shop/products) 和协议 (HTTP/1.1)。
Headers列在请求行下方。在每一行上,首先定义Headers本身,冒号后面跟随值。例如,Host Headers的值为“localhost”,Content-Type Headers的值为“application/json”。
对于 GET 请求(最常用的 HTTP 方法),不应有正文。这是因为我们只是请求资源,所有参数都通过 URI 传递。但是,对于其他 HTTP 方法(例如 POST),正文将列在Headers之后,中间有一个链接中断。在右侧的 HTTP 响应示例中,您可以看到这样的示例。
响应结构通常是相同的。我们再次有一个响应行、标题和正文。响应中需要指出的主要内容之一是状态代码。这表明请求发生了什么。“200 OK”是一个好兆头,这意味着请求已正常处理。还有其他响应代码,它们可以分类如下:
100-199 是信息性回复200-299 为成功响应300-399是重定向消息400-499是客户端错误500-599 是服务器错误如果您想深入了解状态代码,可以查看RFC 9110。
HTTP 方法
这些也可以称为 HTTP 动词。它们指示要对资源执行的预期操作。最常见的 HTTP 方法是 GET、POST、PUT 和 DELETE。虽然您可能不需要立即知道每种方法的用途,但了解常用方法很重要。
GET – 从服务器检索资源。POST – 向服务器提交资源。PUT – 更新服务器上的资源。DELETE – 删除服务器上的资源。其他需要注意的方法有 HEAD、PATCH、OPTIONS、CONNECT 和 TRACE。
了解应用程序的行为方式以及它接受哪些 HTTP 方法有时可能会导致我们发现意外的行为。例如,当应用程序接受并处理开发人员不希望的 HTTP 方法时。
HTTP Headers
Headers用于通过请求和响应传递附加信息。当我们谈论请求Headers时,我们指的是在初始请求中从客户端发送到 Web 服务器的Headers。响应Headers是返回的Headers。我们将介绍作为应用程序安全工程师或 Web 应用程序渗透测试人员需要理解的一些标题。
内容安全策略
有时称为“CSP”。这有助于浏览器检测并减轻一些注入攻击,例如 XSS。当它被定义时,它还需要一个与之配套的策略,它描述了许多要遵循的指令。您可以在mdn 网络文档上找到有关指令的更多信息。
X 框架选项
这告诉浏览器是否允许在 <frame>、<iframe>、<embed> 或 <object> 中呈现页面。使用 X-Frame-Options 可以防止页面加载到其他站点,从而防止点击劫持攻击。
HTTP严格传输安全协议
通常称为“HSTS”。这告诉浏览器只能通过 HTTPS 访问该站点。如果发出 HTTP 请求,应自动升级为 HTTPS。
在这里,我们只是强调了一些可能会从漏洞扫描或其他测试中标记出来的关键问题。当然,有很多标题需要考虑,因此我们鼓励您花一些时间来查看每个标题。尝试彻底了解他们所做的事情,也许更重要的是,他们的局限性是什么。
Cookies
因为HTTP 是无状态协议(即它不维护请求之间的会话或连接),所以我们需要一种会话管理机制。Cookie 为我们提供了这样的功能,其工作方式如下:
用户通过 Web 服务进行身份验证Web 服务器生成一个会话 ID 并将其作为 cookie 发送回客户端客户端通过每个后续请求将会话 ID 发送回服务器。在这种情况下,任何带有该会话 ID 的请求都将被视为来自经过身份验证的用户。
这里有一些缺点。如果会话 ID 是可预测的或被盗的,攻击者只需发送请求并将会话 ID 作为 cookie 包含在内即可使用它来伪装成用户。这称为会话劫持。
Cookie 由名称、值和到期日期组成。当它们过期时,浏览器将丢弃它们。您经常会看到它们以 base64 编码(尽管这不是硬性规则,有许多可用的编码方案),并且可以使用指示如何处理它们的标志来设置它们。
Cookies标志
我们需要了解几个标志,因为它们可能会在与开发人员或其他安全专业人员的随意对话中出现。
HttpOnly:这会阻止 JavaScript 访问 cookie。防止任何客户端脚本窃取用户会话或与用户会话交互被认为是最佳实践。有时,您会发现一些应用程序已被遗忘。
安全:这将确保 cookie 仅通过安全连接 (HTTPS) 发送。
SameSite:此标志指示何时发送 cookie。有 3 个选项:strict、lax和none。严格意味着 cookie 仅与来自与 cookie 相同的站点的请求一起发送。Lax 意味着 cookie 仅与来自与 cookie 相同的站点的请求以及某些跨站点请求(例如 GET 请求)一起发送。None 表示 cookie 将与所有类型的请求一起发送,无论来源如何。值得注意的是,如果未设置 SameSite 标志,某些浏览器将应用默认值。
Expires:顾名思义,它告诉浏览器何时丢弃 cookie。
版权声明:本文转载于今日头条,版权归作者所有,如果侵权,请联系本站编辑删除