isSecure
参数设置为 true
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 Cookie。通过未加密的通道发送 Cookie 将使其受到 Network Sniffing 攻击,因此该安全标记有助于保护 Cookie 值的机密性。如果 Cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。isSecure
参数设置为 true
。
...
Cookie cookie = new Cookie('emailCookie', emailCookie, path, maxAge, false, 'Strict');
...
isSecure
参数,那么在 HTTPS 请求过程中发送的 Cookie 也会在随后的 HTTP 请求过程中被发送。通过未加密的无线连接探查网络流量对攻击者而言十分简单,因此通过 HTTP 发送 Cookie(特别是具有会话 ID 的 Cookie)可能会危及应用程序安全。Secure
标记设置为 true
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 cookie。通过未加密的通道发送 cookie 将使其受到网络截取攻击,因此安全标记有助于保护 cookie 值的保密性。如果 cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。Secure
属性的情况下,为响应添加了一个 Cookie。
...
HttpCookie cookie = new HttpCookie("emailCookie", email);
Response.AppendCookie(cookie);
...
Secure
标记,那么在 HTTPS 请求过程中发送的 cookie 也会在随后的 HTTP 请求过程中被发送。通过未加密的无线连接截取网络信息流对攻击者而言十分简单,因此通过 HTTP 发送 cookie(特别是具有会话 ID 的 cookie)可能会危及应用程序安全。Secure
标记设置为 true
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 Cookie。通过未加密的通道发送 Cookie 将使其受到 Network Sniffing 攻击,因此该 secure 标记有助于保护 Cookie 值的机密性。如果 Cookie 包含私人数据或会话标识符,或带有 CSRF 标记,那么该标记尤其重要。Secure
标记的情况下将 cookie 添加到响应中。
cookie := http.Cookie{
Name: "emailCookie",
Value: email,
}
http.SetCookie(response, &cookie)
...
Secure
标记,那么在 HTTPS 请求过程中发送的 Cookie 也会在随后的 HTTP 请求过程中被发送。攻击者随后可截取未加密的网络信息流(通过无线网络时十分容易),从而危及 cookie 安全。Secure
标记设置为 true
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 Cookie。通过未加密的通道发送 Cookie 将使其受到 Network Sniffing 攻击,因此该 secure 标记有助于保护 Cookie 值的机密性。如果 Cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。use-secure-cookie
属性允许 remember-me
Cookie 通过未加密的传输发送出去。
<http auto-config="true">
...
<remember-me use-secure-cookie="false"/>
</http>
Secure
标记,那么在 HTTPS 请求过程中发送的 Cookie 也会在随后的 HTTP 请求过程中被发送。通过未加密的无线连接监听网络通信对攻击者而言十分简单,因此通过 HTTP 发送 Cookie(特别是具有会话 ID 的 Cookie)可能会危及应用程序安全。Secure
标记设置为 true
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 cookie。通过未加密的通道发送 cookie 将使其受到网络截取攻击,因此安全标记有助于保护 cookie 值的保密性。如果 cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。Secure
属性设置为 true
的情况下,为响应添加了一个 Cookie。
res.cookie('important_cookie', info, {domain: 'secure.example.com', path: '/admin', httpOnly: true, secure: false});
Secure
标记,那么在 HTTPS 请求过程中发送的 cookie 也会在随后的 HTTP 请求过程中被发送。通过未加密的无线连接截取网络信息流对攻击者而言十分简单,因此通过 HTTP 发送 cookie(特别是具有会话 ID 的 cookie)可能会危及应用程序安全。NSHTTPCookieSecure
标记设置为 TRUE
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 cookie。通过未加密的通道发送 cookie 将使其受到网络截取攻击,因此安全标记有助于保护 cookie 值的保密性。如果 cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。Secure
标记的情况下,为响应添加了一个 Cookie。
...
NSDictionary *cookieProperties = [NSDictionary dictionary];
...
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
...
Secure
标记,那么在 HTTPS 请求过程中发送的 cookie 也会在随后的 HTTP 请求过程中被发送。通过未加密的无线连接截取网络信息流对攻击者而言十分简单,因此通过 HTTP 发送 cookie(特别是具有会话 ID 的 cookie)可能会危及应用程序安全。Secure
标记设置为 true
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 cookie。通过未加密的通道发送 cookie 将使其受到网络截取攻击,因此安全标记有助于保护 cookie 值的保密性。如果 cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。Secure
标记的情况下将 cookie 添加到响应中。
...
setcookie("emailCookie", $email, 0, "/", "www.example.com");
...
Secure
标记,那么在 HTTPS 请求过程中发送的 Cookie 也会在随后的 HTTP 请求过程中被发送。攻击者随后可截取未加密的网络信息流(通过无线网络时十分容易),从而危及 cookie 安全。Secure
标记设置为 True
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 cookie。通过未加密的通道发送 cookie 将使其受到网络截取攻击,因此安全标记有助于保护 cookie 值的保密性。如果 cookie 包含私人数据或会话标识符,或带有 CSRF 标记,那么该标记尤其重要。Secure
标记的情况下将 cookie 添加到响应中。
from django.http.response import HttpResponse
...
def view_method(request):
res = HttpResponse()
res.set_cookie("emailCookie", email)
return res
...
Secure
标记,那么在 HTTPS 请求过程中发送的 Cookie 也会在随后的 HTTP 请求过程中被发送。攻击者随后可截取未加密的网络信息流(通过无线网络时十分容易),从而危及 cookie 安全。Secure
标记设置为 true
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 Cookie。通过未加密的通道发送 Cookie 将使其受到 Network Sniffing 攻击,因此该 secure 标记有助于保护 Cookie 值的机密性。如果 Cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。Secure
标记的情况下,为响应添加了一个 Cookie。
Ok(Html(command)).withCookies(Cookie("sessionID", sessionID, secure = false))
Secure
标记,那么在 HTTPS 请求过程中发送的 Cookie 也会在随后的 HTTP 请求过程中被发送。通过未加密的无线连接监听网络通信对攻击者而言十分简单,因此通过 HTTP 发送 Cookie(特别是具有会话 ID 的 Cookie)可能会危及应用程序安全。NSHTTPCookieSecure
标记设置为 TRUE
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 Cookie。通过未加密的通道发送 Cookie 将使其受到 Network Sniffing 攻击,因此该 secure 标记有助于保护 Cookie 值的机密性。如果 Cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。Secure
标记的情况下,为响应添加了一个 Cookie。
...
let properties = [
NSHTTPCookieDomain: "www.example.com",
NSHTTPCookiePath: "/service",
NSHTTPCookieName: "foo",
NSHTTPCookieValue: "bar"
]
let cookie : NSHTTPCookie? = NSHTTPCookie(properties:properties)
...
Secure
标记,那么在 HTTPS 请求过程中发送的 Cookie 也会在随后的 HTTP 请求过程中被发送。通过未加密的无线连接监听网络通信对攻击者而言十分简单,因此通过 HTTP 发送 Cookie(特别是具有会话 ID 的 Cookie)可能会危及应用程序安全。CSRF_COOKIE_SECURE
属性设置为 True
或将其设置为 False
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 cookie。通过未加密的通道发送 cookie 将使其受到网络截取攻击,因此安全标记有助于保护 cookie 值的保密性。如果 cookie 包含私人数据、会话标识符,或带有 CSRF 标记,那么该标记尤其重要。Secure
位。
...
MIDDLEWARE = (
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'csp.middleware.CSPMiddleware',
'django.middleware.security.SecurityMiddleware',
...
)
...
Secure
标记,那么在 HTTPS 请求过程中发送的 Cookie 也会在随后的 HTTP 请求过程中被发送。攻击者随后可截取未加密的网络信息流(通过无线网络时十分容易),从而危及 cookie 安全。HttpOnly
标记设置为 true
。HttpOnly
Cookie 属性,以阻止客户端脚本访问 Cookie。Cross-Site Scripting 攻击通常会访问 Cookie,以试图窃取会话标识符或身份验证标记。如果未启用 HttpOnly
标记,攻击者就能更容易地访问用户 Cookie。HttpOnly
属性的情况下创建一个 Cookie。
HttpCookie cookie = new HttpCookie("emailCookie", email);
Response.AppendCookie(cookie);
HttpOnly
标记设置为 true
。HttpOnly
Cookie 属性,可阻止客户端脚本访问 Cookie。Cross-Site Scripting 攻击通常会访问 Cookie,以试图窃取会话标识符或身份验证标记。如果未启用 HttpOnly
,攻击者就能更容易地访问用户 Cookie。HttpOnly
属性的情况下创建一个 Cookie。
cookie := http.Cookie{
Name: "emailCookie",
Value: email,
}
...
HttpOnly
标记设置为 true
。HttpOnly
Cookie 属性,以阻止客户端脚本访问 Cookie。Cross-Site Scripting 攻击通常会访问 Cookie,以试图窃取会话标识符或身份验证标记。如果未启用 HttpOnly
标记,攻击者就能更容易地访问用户 Cookie。HttpOnly
属性的情况下创建一个 Cookie。
javax.servlet.http.Cookie cookie = new javax.servlet.http.Cookie("emailCookie", email);
// Missing a call to: cookie.setHttpOnly(true);
HttpOnly
标记设置为 true
。HttpOnly
Cookie 属性,以阻止客户端脚本访问 Cookie。Cross-Site Scripting 攻击通常会访问 Cookie,以试图窃取会话标识符或身份验证标记。如果未启用 HttpOnly
标记,攻击者就能更容易地访问用户 Cookie。httpOnly
属性的情况下创建一个 Cookie。
res.cookie('important_cookie', info, {domain: 'secure.example.com', path: '/admin'});
HttpOnly
标记设置为 true
。HttpOnly
Cookie 属性,以阻止客户端脚本访问 Cookie。Cross-Site Scripting 攻击通常会访问 Cookie,以试图窃取会话标识符或身份验证标记。如果未启用 HttpOnly
标记,攻击者就能更容易地访问用户 Cookie。HttpOnly
属性的情况下创建一个 Cookie。
setcookie("emailCookie", $email, 0, "/", "www.example.com", TRUE); //Missing 7th parameter to set HttpOnly
HttpOnly
标记设置为 True
。HttpOnly
Cookie 属性,可阻止客户端脚本访问 Cookie。Cross-Site Scripting 攻击通常会访问 Cookie,以试图窃取会话标识符或身份验证令牌。如果未启用 HttpOnly
,攻击者就能更容易地访问用户 Cookie。HttpOnly
属性的情况下创建一个 Cookie。
from django.http.response import HttpResponse
...
def view_method(request):
res = HttpResponse()
res.set_cookie("emailCookie", email)
return res
...
HttpOnly
标记设置为 true
。HttpOnly
Cookie 属性,以阻止客户端脚本访问 Cookie。Cross-Site Scripting 攻击通常会访问 Cookie,以试图窃取会话标识符或身份验证标记。如果未启用 HttpOnly
标记,攻击者就能更容易地访问用户 Cookie。HttpOnly
属性的情况下创建一个 Cookie。
Ok(Html(command)).withCookies(Cookie("sessionID", sessionID, httpOnly = false))
HttpCookie.HttpOnly
属性设置为 true
。httpOnlyCookies
属性的默认值为 false,这意味着可通过客户端脚本访问 Cookie。这是一个不必要的 Cross-Site Scripting 威胁,会导致 Cookie 被盗。被盗的 Cookie 可能包含用于识别站点用户的敏感信息,例如 ASP.NET 会话 ID 或表单验证票据,攻击者可以重新放置这些信息以伪装成用户或获取敏感信息。
<configuration>
<system.web>
<httpCookies httpOnlyCookies="false">
HttpOnly
标记设置为 true
。HttpOnly
Cookie 属性,可阻止客户端脚本访问 Cookie。Cross-Site Scripting 攻击通常会访问 Cookie,以试图窃取会话标识符或身份验证令牌。如果未启用 HttpOnly
,攻击者就能更容易地访问用户 Cookie。django.middleware.csrf.CsrfViewMiddleware
Django 中间件时,即使未设置 HttpOnly
属性也可发送 CSRF cookie。
...
MIDDLEWARE = (
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'csp.middleware.CSPMiddleware',
'django.middleware.security.SecurityMiddleware',
...
)
...
HttpOnly
标记设置为 true
。HttpOnly
Cookie 属性,以阻止客户端脚本访问 Cookie。Cross-Site Scripting 攻击通常会访问 Cookie,以试图窃取会话标识符或身份验证标记。如果未启用 HttpOnly
标记,攻击者就能更容易地访问用户 Cookie。HttpOnly
标记设置为 true
的情况下创建会话 Cookie。
server.servlet.session.cookie.http-only=false
HttpOnly
标记设置为 true
。HttpOnly
Cookie 属性,以阻止客户端脚本访问 Cookie。Cross-Site Scripting 攻击通常会访问 Cookie,以试图窃取会话标识符或身份验证标记。如果未启用 HttpOnly
标记,攻击者就能更容易地访问用户 Cookie。HttpOnly
标记设置为 true
的情况下创建会话 Cookie。
session_set_cookie_params(0, "/", "www.example.com", true, false);
HttpOnly
标记设置为 true
。HttpOnly
Cookie 属性,可阻止客户端脚本访问 Cookie。Cross-Site Scripting 攻击通常会访问 Cookie,以试图窃取会话标识符或身份验证令牌。如果未启用 HttpOnly
,攻击者就能更容易地访问用户 Cookie。HttpOnly
属性的情况下显式设置会话 Cookie。
...
MIDDLEWARE = (
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'csp.middleware.CSPMiddleware',
'django.middleware.security.SecurityMiddleware',
...
)
...
SESSION_COOKIE_HTTPONLY = False
...
SameSite
属性。SameSite
参数限制了 Cookie 的作用域,因此只有当请求是从第一方或同一站点上下文生成时,才会将 Cookie 附加到请求。这样有助于保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 攻击。SameSite
参数可以有以下三个值:Strict
时,Cookie 仅在顶级导航时与请求一起发送。Lax
时,Cookie 会在顶级导航时与从第三方站点发送到主机的 GET 请求一起从同一主机发送。例如,假设第三方站点拥有链接到主机站点的 iframe
或 href
标签。如果用户点击链接,请求将包含 Cookie。SameSite
属性设置为 None
。
...
Cookie cookie = new Cookie('name', 'Foo', path, -1, true, 'None');
...
SameSite
属性。SameSite
属性限制了 Cookie 的作用域,因此只有当请求是从第一方或同一站点上下文生成时,才会将 Cookie 附加到请求。这样有助于保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 攻击。SameSite
属性可以有以下三个值:Strict
时,Cookie 仅在顶级导航时与请求一起发送。Lax
时,Cookie 随同一主机顶级导航时的请求以及来自第三方站点的 GET 请求一起发送,包括那些具有链接到主机站点的 iframe
或 href
标签的请求。如果用户点击链接,请求将包含 Cookie。SameSite
属性。
...
CookieOptions opt = new CookieOptions()
{
SameSite = SameSiteMode.None;
};
context.Response.Cookies.Append("name", "Foo", opt);
...
SameSite
属性。SameSite
属性限制了 Cookie 的作用域,因此只有当请求是从第一方或同一站点上下文生成时,才会将 Cookie 附加到请求。这样有助于保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 攻击。SameSite
属性可以有以下三个值:Strict
时,Cookie 仅在顶级导航时与请求一起发送。Lax
时,Cookie 随顶级导航与从第三方站点发送到主机的 GET 请求一起从同一主机发送。例如,假设第三方站点拥有链接到主机站点的 iframe
或 href
标签。如果用户点击链接,请求将包含 Cookie。SameSite
属性。
c := &http.Cookie{
Name: "cookie",
Value: "samesite-none",
SameSite: http.SameSiteNoneMode,
}
SameSite
属性。SameSite
属性限制了 Cookie 的作用域,因此只有当请求是从第一方或同一站点上下文生成时,才会将 Cookie 附加到请求。这样有助于保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 攻击。SameSite
属性可以有以下三个值:Strict
时,Cookie 仅在顶级导航时与请求一起发送。Lax
时,Cookie 随同一主机顶级导航时的请求以及来自第三方站点的 GET 请求一起发送,包括那些具有链接到主机站点的 iframe
或 href
标签的请求。例如,假设第三方站点拥有链接到主机站点的 iframe
或 href
标签。如果用户点击链接,请求将包含 Cookie。SameSite
属性。
ResponseCookie cookie = ResponseCookie.from("myCookie", "myCookieValue")
...
.sameSite("None")
...
SameSite
属性。SameSite
属性限制了 Cookie 的作用域,因此只有当请求是从第一方或同一站点上下文生成时,才会将 Cookie 附加到请求。这样有助于保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 攻击。SameSite
属性可以有以下三个值:Strict
时,Cookie 仅在顶级导航时与请求一起发送。Lax
时,Cookie 随同一主机顶级导航时的请求以及来自第三方站点的 GET 请求一起发送,包括那些具有链接到主机站点的 iframe
或 href
标签的请求。例如,假设第三方站点拥有链接到主机站点的 iframe
或 href
标签。如果用户点击链接,请求将包含 Cookie。SameSite
属性。
app.get('/', function (req, res) {
...
res.cookie('name', 'Foo', { sameSite: false });
...
}
SameSite
属性。SameSite
属性限制了 Cookie 的作用域,因此只有当请求是从第一方或同一站点上下文生成时,才会将 Cookie 附加到请求。这样有助于保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 攻击。SameSite
属性可以有以下三个值:Strict
时,Cookie 仅在顶级导航时与请求一起发送。Lax
时,Cookie 随顶级导航与从第三方站点发送到主机的 GET 请求一起从同一主机发送。例如,假设第三方站点拥有链接到主机站点的 iframe
或 href
标签。如果用户点击链接,请求将包含 Cookie。SameSite
属性。
ini_set("session.cookie_samesite", "None");
SameSite
属性。samesite
参数限制了 Cookie 的作用域,因此只有当请求是从第一方或同一站点上下文生成时,才会将 Cookie 附加到请求。这样有助于保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 攻击。samesite
参数可以有以下三个值:Strict
时,Cookie 仅在顶级导航时与请求一起发送。Lax
时,Cookie 随顶级导航与从第三方站点发送到主机的 GET 请求一起从同一主机发送。例如,假设第三方站点拥有链接到主机站点的 iframe
或 href
标签。如果用户点击链接,请求将包含 Cookie。SameSite
属性。
response.set_cookie("cookie", value="samesite-none", samesite=None)
.example.com
”的基本域中处于活动状态。这会使 Cookie 暴露在基本域和任何子域中的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://secure.example.com/
上,当用户登录时,该应用程序将使用域 ".example.com
" 设置会话 ID Cookie。
HttpCookie cookie = new HttpCookie("sessionID", sessionID);
cookie.Domain = ".example.com";
http://insecure.example.com/
上部署了另一个不太安全的应用程序,并且它存在 Cross-Site Scripting 漏洞。 任何浏览到 http://insecure.example.com
的 http://secure.example.com
认证用户都面临着暴露来自 http://secure.example.com
的会话 Cookie 的风险。insecure.example.com
来创建自己范围过大的 Cookie,以覆盖来自 secure.example.com
的 Cookie,从而执行 Cookie Poisoning 攻击。.example.com
”的基本域中处于活动状态。这会使 Cookie 暴露在基本域和任何子域中的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://secure.example.com/
上,当用户登录时,该应用程序将使用域 ".example.com
" 设置会话 ID Cookie。
cookie := http.Cookie{
Name: "sessionID",
Value: getSessionID(),
Domain: ".example.com",
}
...
http://insecure.example.com/
上部署了另一个不太安全的应用程序,并且它存在 Cross-Site Scripting 漏洞。任何浏览到 http://insecure.example.com
的 http://secure.example.com
认证用户都面临着暴露来自 http://secure.example.com
的会话 Cookie 的风险。insecure.example.com
进行“Cookie Poisoning 攻击”,创建自己范围过大的 Cookie,并覆盖 Secure.example.com
中的 Cookie。.example.com
”的基本域中处于活动状态。这会使 Cookie 暴露在基本域和任何子域中的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://secure.example.com/
上,当用户登录时,该应用程序将使用域 ".example.com
" 设置会话 ID Cookie。
Cookie cookie = new Cookie("sessionID", sessionID);
cookie.setDomain(".example.com");
http://insecure.example.com/
上有另一个不太安全的应用程序,它包含 cross-site scripting 漏洞。任何浏览到 http://insecure.example.com
的 http://secure.example.com
认证用户面临着暴露来自 http://secure.example.com
的会话 cookie 的风险。insecure.example.com
进行 cookie poisoning 攻击,创建自己范围过大的 cookie,并覆盖来自 secure.example.com
的 cookie。.example.com
”的基本域中处于活动状态。这会使 Cookie 暴露在基本域和任何子域中的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://secure.example.com/
上,当用户登录时,该应用程序将使用域 ".example.com
" 设置会话 ID Cookie。
cookie_options = {};
cookie_options.domain = '.example.com';
...
res.cookie('important_cookie', info, cookie_options);
http://insecure.example.com/
上有另一个不太安全的应用程序,它包含 cross-site scripting 漏洞。任何浏览到 http://insecure.example.com
的 http://secure.example.com
认证用户面临着暴露来自 http://secure.example.com
的会话 cookie 的风险。insecure.example.com
进行 cookie poisoning 攻击,创建自己范围过大的 cookie,并覆盖来自 secure.example.com
的 cookie。.example.com
”的基本域中处于活动状态。这会使 Cookie 暴露在基本域和任何子域中的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://secure.example.com/
上,当用户登录时,该应用程序将使用域 ".example.com
" 设置会话 ID Cookie。
...
NSDictionary *cookieProperties = [NSDictionary dictionary];
...
[cookieProperties setValue:@".example.com" forKey:NSHTTPCookieDomain];
...
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
...
http://insecure.example.com/
上有另一个不太安全的应用程序,它包含 cross-site scripting 漏洞。任何浏览到 http://insecure.example.com
的 http://secure.example.com
认证用户面临着暴露来自 http://secure.example.com
的会话 cookie 的风险。insecure.example.com
进行 cookie poisoning 攻击,创建自己范围过大的 cookie,并覆盖来自 secure.example.com
的 cookie。.example.com
”的基本域中处于活动状态。这会使 Cookie 暴露在基本域和任何子域中的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://secure.example.com/
上,当用户登录时,该应用程序将使用域 ".example.com
" 设置会话 ID Cookie。
setcookie("mySessionId", getSessionID(), 0, "/", ".example.com", true, true);
http://insecure.example.com/
上有另一个不太安全的应用程序,它包含 cross-site scripting 漏洞。任何浏览到 http://insecure.example.com
的 http://secure.example.com
认证用户面临着暴露来自 http://secure.example.com
的会话 cookie 的风险。insecure.example.com
进行 cookie poisoning 攻击,创建自己范围过大的 cookie,并覆盖来自 secure.example.com
的 cookie。.example.com
”的基本域中处于活动状态。这会使 Cookie 暴露在基本域和任何子域中的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://secure.example.com/
上,当用户登录时,该应用程序将使用域 ".example.com
" 设置会话 ID Cookie。
from django.http.response import HttpResponse
...
def view_method(request):
res = HttpResponse()
res.set_cookie("mySessionId", getSessionID(), domain=".example.com")
return res
...
http://insecure.example.com/
上有另一个不太安全的应用程序,它包含 cross-site scripting 漏洞。任何浏览到 http://insecure.example.com
的 http://secure.example.com
认证用户面临着暴露来自 http://secure.example.com
的会话 cookie 的风险。insecure.example.com
进行“Cookie 篡改攻击”,创建自己范围过大的 cookie,并覆盖 secure.example.com
中的 cookie。.example.com
”的基本域中处于活动状态。这会使 Cookie 暴露在基本域和任何子域中的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://secure.example.com/
上,当用户登录时,该应用程序将使用域 ".example.com
" 设置会话 ID Cookie。
Ok(Html(command)).withCookies(Cookie("sessionID", sessionID, domain = Some(".example.com")))
http://insecure.example.com/
上部署了另一个不太安全的应用程序,并且它存在 Cross-Site Scripting 漏洞。 任何浏览到 http://insecure.example.com
的 http://secure.example.com
认证用户都面临着暴露来自 http://secure.example.com
的会话 Cookie 的风险。insecure.example.com
来创建自己范围过大的 Cookie,以覆盖来自 secure.example.com
的 Cookie,从而执行 Cookie Poisoning 攻击。.example.com
”的基本域中处于活动状态。这会使 Cookie 暴露在基本域和任何子域中的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://secure.example.com/
上,当用户登录时,该应用程序将使用域 ".example.com
" 设置会话 ID Cookie。
...
let properties = [
NSHTTPCookieDomain: ".example.com",
NSHTTPCookiePath: "/service",
NSHTTPCookieName: "foo",
NSHTTPCookieValue: "bar",
NSHTTPCookieSecure: true
]
let cookie : NSHTTPCookie? = NSHTTPCookie(properties:properties)
...
http://insecure.example.com/
上有另一个不太安全的应用程序,它包含 cross-site scripting 漏洞。任何浏览到 http://insecure.example.com
的 http://secure.example.com
认证用户面临着暴露来自 http://secure.example.com
的会话 cookie 的风险。insecure.example.com
进行 cookie poisoning 攻击,创建自己范围过大的 cookie,并覆盖来自 secure.example.com
的 cookie。/
”)进行访问。这会使 Cookie 暴露在该域的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://communitypages.example.com/MyForum
上部署了一个论坛应用程序,当用户登录该论坛时,该应用程序将使用路径“/
”设置会话 ID Cookie。例如:
...
String path = '/';
Cookie cookie = new Cookie('sessionID', sessionID, path, maxAge, true, 'Strict');
...
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum
设置的 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 ID 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。/EvilSite
来创建自己范围过大的 Cookie,以覆盖来自 /MyForum
的 Cookie,从而执行 Cookie Poisoning 攻击。/
",然而,这样做会使 Cookie 暴露在同一域的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://communitypages.example.com/MyForum
上部署了一个论坛应用程序,当用户登录该论坛时,该应用程序将使用路径“/
”设置会话 ID Cookie。
HttpCookie cookie = new HttpCookie("sessionID", sessionID);
cookie.Path = "/";
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum
设置的 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 ID 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。/EvilSite
进行 cookie poisoning 攻击,创建自己范围过大的 cookie,并覆盖来自 /MyForum
的 cookie。/
”进行访问。这会使 Cookie 暴露在该域的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://communitypages.example.com/MyForum
上部署了一个论坛应用程序,当用户登录该论坛时,该应用程序将使用路径 "/
" 设置会话 ID Cookie。
cookie := http.Cookie{
Name: "sessionID",
Value: sID,
Expires: time.Now().AddDate(0, 0, 1),
Path: "/",
}
...
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum
设置的 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 ID 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。/EvilSite
进行“Cookie Poisoning 攻击”,创建自己范围过大的 Cookie,并覆盖 /MyForum
中的 Cookie。/
”进行访问。这会使 Cookie 暴露在该域的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://communitypages.example.com/MyForum
上部署了一个论坛应用程序,当用户登录该论坛时,该应用程序将使用路径“/
”设置会话 ID Cookie。
Cookie cookie = new Cookie("sessionID", sessionID);
cookie.setPath("/");
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum
设置的 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 ID 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。/EvilSite
进行 cookie poisoning 攻击,创建自己范围过大的 cookie,并覆盖来自 /MyForum
的 cookie。/
”进行访问。这会使 Cookie 暴露在该域的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://communitypages.example.com/MyForum
上部署了一个论坛应用程序,当用户登录该论坛时,该应用程序将使用路径“/
”设置会话 ID Cookie。
cookie_options = {};
cookie_options.path = '/';
...
res.cookie('important_cookie', info, cookie_options);
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum
设置的 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 ID 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。/EvilSite
进行 cookie poisoning 攻击,创建自己范围过大的 cookie,并覆盖来自 /MyForum
的 cookie。/
”进行访问。这会使 Cookie 暴露在该域的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://communitypages.example.com/MyForum
上部署了一个论坛应用程序,当用户登录该论坛时,该应用程序将使用路径“/
”设置会话 ID Cookie。
...
NSDictionary *cookieProperties = [NSDictionary dictionary];
...
[cookieProperties setValue:@"/" forKey:NSHTTPCookiePath];
...
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
...
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum
设置的 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 ID 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。/EvilSite
进行 cookie poisoning 攻击,创建自己范围过大的 cookie,并覆盖来自 /MyForum
的 cookie。/
”进行访问。这会使 Cookie 暴露在该域的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://communitypages.example.com/MyForum
上部署了一个论坛应用程序,当用户登录该论坛时,该应用程序将使用路径“/
”设置会话 ID Cookie。
setcookie("mySessionId", getSessionID(), 0, "/", "communitypages.example.com", true, true);
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum
设置的 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 ID 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。/EvilSite
进行 cookie poisoning 攻击,创建自己范围过大的 cookie,并覆盖来自 /MyForum
的 cookie。/
”进行访问。这会使 Cookie 暴露在该域的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://communitypages.example.com/MyForum
上部署了一个论坛应用程序,当用户登录该论坛时,该应用程序将使用路径“/
”设置会话 ID Cookie。
from django.http.response import HttpResponse
...
def view_method(request):
res = HttpResponse()
res.set_cookie("sessionid", value) # Path defaults to "/"
return res
...
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum
设置的 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 ID 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。/EvilSite
进行“Cookie 篡改攻击”,创建自己范围过大的 cookie,并覆盖 /MyForum
中的 cookie。/
”进行访问。这会使 Cookie 暴露在该域的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://communitypages.example.com/MyForum
上部署了一个论坛应用程序,当用户登录该论坛时,该应用程序将使用路径“/
”设置会话 ID Cookie。
Ok(Html(command)).withCookies(Cookie("sessionID", sessionID, path = "/"))
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum
设置的 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 ID 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。/EvilSite
来创建自己范围过大的 Cookie,以覆盖来自 /MyForum
的 Cookie,从而执行 Cookie Poisoning 攻击。/
”进行访问。这会使 Cookie 暴露在该域的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://communitypages.example.com/MyForum
上部署了一个论坛应用程序,当用户登录该论坛时,该应用程序将使用路径“/
”设置会话 ID Cookie。
...
let properties = [
NSHTTPCookieDomain: "www.example.com",
NSHTTPCookiePath: "/",
NSHTTPCookieName: "foo",
NSHTTPCookieValue: "bar",
NSHTTPCookieSecure: true
]
let cookie : NSHTTPCookie? = NSHTTPCookie(properties:properties)
...
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum
设置的 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 ID 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。/EvilSite
进行 cookie poisoning 攻击,创建自己范围过大的 cookie,并覆盖来自 /MyForum
的 cookie。.example.com
" 的基本域。然而,这样会使会话 Cookie 暴露在基本域名和任何子域中的所有 Web 应用程序下。泄露会话 Cookie 会危及帐户安全。http://secure.example.com/
上,当用户登录时,该应用程序将使用域 ".example.com
" 设置会话 Cookie。
server.servlet.session.cookie.domain=.example.com
http://insecure.example.com/
上部署了另一个不太安全的应用程序,并且其存在 Cross-Site Scripting 漏洞。任何浏览到 http://insecure.example.com
的 http://secure.example.com
认证用户都面临着暴露来自 http://secure.example.com
的会话 Cookie 的风险。.example.com
" 的基本域。这会使会话 Cookie 暴露在基本域和任何子域中的所有 Web 应用程序下。在应用程序之间共享会话 Cookie 可能会导致其中一个应用程序的漏洞危及另一个应用程序的安全。http://secure.example.com/
上,当用户登录时,该应用程序将使用域 ".example.com
" 设置会话 Cookie。
session_set_cookie_params(0, "/", ".example.com", true, true);
http://insecure.example.com/
上有另一个不太安全的应用程序,它包含 cross-site scripting 漏洞。任何浏览到 http://insecure.example.com
的 http://secure.example.com
认证用户面临着暴露来自 http://secure.example.com
的会话 cookie 的风险。/
")。这样会使 Cookie 暴露在同一域中的所有 Web 应用程序下。泄露会话 Cookie 会危及帐户安全,因为攻击者可能利用域中任何应用程序的漏洞来窃取会话 Cookie。http://communitypages.example.com/MyForum
上,当用户登录该论坛时,该应用程序将使用路径 "/
" 设置会话 Cookie。例如:
server.servlet.session.cookie.path=/
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户单击该链接时,浏览器会将 /MyForum
设置的会话 Cookie 发送到在 /EvilSite
上运行的应用程序。通过使用用户在 /MyForum
上提供的会话 Cookie 后,攻击者就会危及浏览 /EvilSite
的任何论坛用户的帐户安全。/
")。这样会使 Cookie 暴露在同一域中的所有 Web 应用程序下。泄露会话 Cookie 会危及帐户安全,因为攻击者可能利用域中任何应用程序的漏洞来窃取会话 Cookie。http://communitypages.example.com/MyForum
上,当用户登录该论坛时,该应用程序将使用路径 "/
" 设置会话 Cookie。
session_set_cookie_params(0, "/", "communitypages.example.com", true, true);
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户单击该链接时,浏览器会将 /MyForum
设置的会话 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 Cookie 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。SameSite
属性未设置为 Strict
。SameSite
参数限制了 Cookie 的作用域,因此只有当请求是从第一方或同一站点上下文生成时,才会将 Cookie 附加到请求。这样有助于保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 攻击。SameSite
参数可以有以下三个值:Strict
时,Cookie 仅在顶级导航时与请求一起发送。Lax
时,Cookie 会在顶级导航时与从第三方站点发送到主机的 GET 请求一起从同一主机发送。例如,假设第三方站点拥有链接到主机站点的 iframe
或 href
标签。如果用户点击链接,请求将包含 Cookie。SameSite
参数设置为 Lax
。
...
Cookie cookie = new Cookie('name', 'Foo', path, -1, true, 'Lax');
...
SameSite
属性未设置为 Strict
。SameSite
属性保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 等攻击。会话 Cookie 代表用户访问站点,以便用户可以执行授权操作。但是,浏览器会自动将 Cookie 与请求一起发送,因此用户和网站会隐式信任浏览器进行授权。攻击者可以滥用此信任,通过在攻击者控制的第三方网站页面中的 link
和 iframe
等标签的 href
和 src
属性中嵌入链接,代表用户向站点发出请求。如果攻击者能够将一位毫无戒备的用户引诱到他们控制的第三方站点,则攻击者可以发出自动包含用于授权该用户的会话 Cookie 的请求,从而可以使攻击者获取有效授权,就像他们是用户一样。SameSite
属性的值设置为 Strict
。这将限制浏览器仅将 Cookie 附加到顶级导航时的请求或来自同一站点的请求。来自第三方站点的请求(通过 iframe
、img
和 form
等各种标签中的链接)不含这些 Cookie,因此能阻止站点采取用户可能未授权的操作。SameSite
属性的值设置为 Lax
。
...
CookieOptions opt = new CookieOptions()
{
SameSite = SameSiteMode.Lax;
};
context.Response.Cookies.Append("name", "Foo", opt);
...
SameSite
属性未设置为 SameSiteStrictMode
。SameSite
属性保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 等攻击。会话 Cookie 代表用户访问站点,以便用户可以执行授权操作。但是,浏览器会自动将 Cookie 与请求一起发送,因此用户和网站会隐式信任浏览器进行授权。攻击者可以滥用此信任,通过在攻击者控制的第三方网站页面中的 link
和 iframe
等标签的 href
和 src
属性中嵌入链接,代表用户向站点发出请求。如果攻击者能够将一位毫无戒备的用户引诱到他们控制的第三方站点,则攻击者可以发出自动包含用于授权该用户的会话 Cookie 的请求,从而可以使攻击者获取有效授权,就像他们是用户一样。SameSite
属性的 SameSiteStrictMode
,这将限制浏览器仅将 Cookie 附加到顶级导航时的请求或来自同一站点的请求。来自第三方站点的请求(通过 iframe
、img
和 form
等各种标签中的链接)不含这些 Cookie,因此能阻止站点采取用户可能未授权的操作。SameSite
属性中的 SameSiteLaxMode
。
c := &http.Cookie{
Name: "cookie",
Value: "samesite-lax",
SameSite: http.SameSiteLaxMode,
}
SameSite
属性未设置为 Strict
。SameSite
属性保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 等攻击。会话 Cookie 代表用户访问站点,以便用户可以执行授权操作。但是,浏览器会自动将 Cookie 与请求一起发送,因此用户和网站会隐式信任浏览器进行授权。攻击者可以滥用此信任,通过在攻击者控制的第三方网站页面中的 link
和 iframe
等标签的 href
和 src
属性中嵌入链接,代表用户向站点发出请求。如果攻击者能够将一位毫无戒备的用户引诱到他们控制的第三方站点,则攻击者可以发出自动包含用于授权该用户的会话 Cookie 的请求,从而可以使攻击者获取有效授权,就像他们是用户一样。SameSite
属性的值设置为 Strict
。这将限制浏览器仅将 Cookie 附加到顶级导航时的请求或来自同一站点的请求。来自第三方站点的请求(通过 iframe
、img
和 form
等各种标签中的链接)不含这些 Cookie,因此能阻止站点采取用户可能未授权的操作。SameSite
属性的值设置为 Lax
。
ResponseCookie cookie = ResponseCookie.from("myCookie", "myCookieValue")
...
.sameSite("Lax")
...
}
SameSite
属性未设置为 Strict
。SameSite
属性保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 等攻击。会话 Cookie 代表用户访问站点,以便用户可以执行授权操作。但是,浏览器会自动将 Cookie 与请求一起发送,因此用户和网站会隐式信任浏览器进行授权。攻击者可以滥用此信任,通过在攻击者控制的第三方网站页面中的 link
和 iframe
等标签的 href
和 src
属性中嵌入链接,代表用户向站点发出请求。如果攻击者能够将一位毫无戒备的用户引诱到他们控制的第三方站点,则攻击者可以发出自动包含用于授权该用户的会话 Cookie 的请求,从而可以使攻击者获取有效授权,就像他们是用户一样。SameSite
属性的值设置为 Strict
。这将限制浏览器仅将 Cookie 附加到顶级导航时的请求或来自同一站点的请求。来自第三方站点的请求(通过 iframe
、img
和 form
等各种标签中的链接)不含这些 Cookie,因此能阻止站点采取用户可能未授权的操作。SameSite
属性的值设置为 Lax
。
app.get('/', function (req, res) {
...
res.cookie('name', 'Foo', { sameSite: "Lax" });
...
}
SameSite
属性未设置为 Strict
。SameSite
属性保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 等攻击。会话 Cookie 代表用户访问站点,以便用户可以执行授权操作。但是,浏览器会自动将 Cookie 与请求一起发送,因此用户和网站会隐式信任浏览器进行授权。攻击者可以滥用此信任,通过在攻击者控制的第三方网站页面中的 link
和 iframe
等标签的 href
和 src
属性中嵌入链接,代表用户向站点发出请求。如果攻击者能够将一位毫无戒备的用户引诱到他们控制的第三方站点,则攻击者可以发出自动包含用于授权该用户的会话 Cookie 的请求,从而可以使攻击者获取有效授权,就像他们是用户一样。SameSite
属性的 Strict
,这将限制浏览器仅将 Cookie 附加到顶级导航时的请求或来自同一站点的请求。来自第三方站点的请求(通过 iframe
、img
和 form
等各种标签中的链接)不含这些 Cookie,因此能阻止站点采取用户可能未授权的操作。SameSite
属性中的 Lax
模式。
ini_set("session.cookie_samesite", "Lax");
SameSite
属性未设置为 Strict
。SameSite
属性保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 等攻击。会话 Cookie 代表用户访问站点,以便用户可以执行授权操作。但是,浏览器会自动将 Cookie 与请求一起发送,因此用户和网站会隐式信任浏览器进行授权。攻击者可以滥用此信任,通过在攻击者控制的第三方网站页面中的 link
和 iframe
等标签的 href
和 src
属性中嵌入链接,代表用户向站点发出请求。如果攻击者将毫无戒备的用户引诱到他们控制的第三方站点,则攻击者可以发出自动包含具有用户授权的会话 Cookie 的请求。从而可通过用户授权使攻击者获得有效权限。SameSite
参数的 Strict
,这将限制浏览器仅将 Cookie 附加到顶级导航时的请求或来自同一站点的请求。来自第三方站点的请求(通过 iframe
、img
和 form
等各种标签中的链接)不含这些 Cookie,因此能阻止站点采取用户可能未授权的操作。samesite
属性中的 Lax
。
response.set_cookie("cookie", value="samesite-lax", samesite="Lax")
...
Integer maxAge = 60*60*24*365*10;
Cookie cookie = new Cookie('emailCookie', emailCookie, path, maxAge, true, 'Strict');
...
HttpCookie cookie = new HttpCookie("emailCookie", email);
cookie.Expires = DateTime.Now.AddYears(10);;
Cookie cookie = new Cookie("emailCookie", email);
cookie.setMaxAge(60*60*24*365*10);
...
NSDictionary *cookieProperties = [NSDictionary dictionary];
...
[cookieProperties setValue:[[NSDate date] dateByAddingTimeInterval:(60*60*24*365*10)] forKey:NSHTTPCookieExpires];
...
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
...
setcookie("emailCookie", $email, time()+60*60*24*365*10);
from django.http.response import HttpResponse
...
def view_method(request):
res = HttpResponse()
res.set_cookie("emailCookie", email, expires=time()+60*60*24*365*10, secure=True, httponly=True)
return res
...
Ok(Html(command)).withCookies(Cookie("sessionID", sessionID, maxAge = Some(60*60*24*365*10)))
...
let properties = [
NSHTTPCookieDomain: "www.example.com",
NSHTTPCookiePath: "/service",
NSHTTPCookieName: "foo",
NSHTTPCookieValue: "bar",
NSHTTPCookieSecure: true,
NSHTTPCookieExpires : NSDate(timeIntervalSinceNow: (60*60*24*365*10))
]
let cookie : NSHTTPCookie? = NSHTTPCookie(properties:properties)
...
server.servlet.session.cookie.persistent=true
session_set_cookie_params(time()+60*60*24*365*10, "/", "www.example.com", false, true);
Secure
标记设置为 true
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 Cookie。通过未加密的通道发送 Cookie 将使其受到 Network Sniffing 攻击,因此该 secure 标记有助于保护 Cookie 值的机密性。如果 Cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。Secure
标记的情况下将会话 Cookie 添加到响应中。
...
<configuration>
<system.web>
<authentication mode="Forms">
<forms requireSSL="false" loginUrl="login.aspx">
</forms>
</authentication>
</system.web>
</configuration>
...
Secure
标记,那么在 HTTPS 请求过程中发送的 Cookie 也会在随后的 HTTP 请求过程中被发送。通过未加密的无线连接监听网络通信对攻击者而言十分简单,因此通过 HTTP 发送 Cookie(特别是具有会话 ID 的 Cookie)可能会危及应用程序安全。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 Cookie。通过未加密的通道发送 Cookie 将使其受到 Network Sniffing 攻击,因此该 secure 标记有助于保护 Cookie 值的机密性。如果 Cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。Secure
标记。
server.servlet.session.cookie.secure=false
Secure
标记,那么在 HTTPS 请求过程中发送的 Cookie 也会在随后的 HTTP 请求过程中被发送。攻击者随后可截取未加密的网络信息流(通过无线网络时十分容易),从而危及 cookie 安全。Secure
标记设置为 true
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 cookie。通过未加密的通道发送 cookie 将使其受到网络截取攻击,因此安全标记有助于保护 cookie 值的保密性。如果 cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。Secure
标记的情况下将 cookie 添加到响应中。
...
setcookie("emailCookie", $email, 0, "/", "www.example.com");
...
Secure
标记,那么在 HTTPS 请求过程中发送的 Cookie 也会在随后的 HTTP 请求过程中被发送。攻击者随后可截取未加密的网络信息流(通过无线网络时十分容易),从而危及 cookie 安全。SESSION_COOKIE_SECURE
属性设置为 True
或将其设置为 False
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 cookie。通过未加密的通道发送 cookie 将使其受到网络截取攻击,因此安全标记有助于保护 cookie 值的保密性。如果 cookie 包含私人数据、会话标识符,或带有 CSRF 标记,那么该标记尤其重要。Secure
位。
...
MIDDLEWARE = (
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'csp.middleware.CSPMiddleware',
'django.middleware.security.SecurityMiddleware',
...
)
...
Secure
标记,那么在 HTTPS 请求过程中发送的 Cookie 也会在随后的 HTTP 请求过程中被发送。攻击者随后可截取未加密的网络信息流(通过无线网络时十分容易),从而危及 cookie 安全。username
和 password
序列化为位于 C:\user_info.json
的 JSON 文件:
...
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
using (JsonWriter writer = new JsonTextWriter(sw))
{
writer.Formatting = Formatting.Indented;
writer.WriteStartObject();
writer.WritePropertyName("role");
writer.WriteRawValue("\"default\"");
writer.WritePropertyName("username");
writer.WriteRawValue("\"" + username + "\"");
writer.WritePropertyName("password");
writer.WriteRawValue("\"" + password + "\"");
writer.WriteEndObject();
}
File.WriteAllText(@"C:\user_info.json", sb.ToString());
JsonWriter.WriteRawValue()
来执行,将不会对 username
和 password
中的不可信赖数据进行验证以转义与 JSON 相关的特殊字符。这样,用户就可以任意插入 JSON 密钥,可能会更改已序列化的 JSON 的结构。在本例中,在设置 username
的值的提示符下输入用户名时,如果非特权用户 mallory
(密码为 Evil123!
)将 ","role":"admin
附加到其用户名中,则最终保存到 C:\user_info.json
的 JSON 将为:
{
"role":"default",
"username":"mallory",
"role":"admin",
"password":"Evil123!"
}
Dictionary
对象,其中 JsonConvert.DeserializeObject()
如下所示:
String jsonString = File.ReadAllText(@"C:\user_info.json");
Dictionary<string, string> userInfo = JsonConvert.DeserializeObject<Dictionary<string, strin>>(jsonString);
Dictionary
对象中 username
、password
和 role
密钥的最终值将分别为 mallory
、Evil123!
和 admin
。在没有进一步验证反序列化 JSON 值是否有效的情况下,应用程序会错误地为用户分配 mallory
“管理员”特权。username
和 password
序列化为位于 ~/user_info.json
的 JSON 文件:
...
func someHandler(w http.ResponseWriter, r *http.Request){
r.parseForm()
username := r.FormValue("username")
password := r.FormValue("password")
...
jsonString := `{
"username":"` + username + `",
"role":"default"
"password":"` + password + `",
}`
...
f, err := os.Create("~/user_info.json")
defer f.Close()
jsonEncoder := json.NewEncoder(f)
jsonEncoder.Encode(jsonString)
}
username
和 password
中的不可信赖数据进行验证以转义与 JSON 相关的特殊字符。这样,用户就可以任意插入 JSON 密钥,这可能会更改已序列化的 JSON 结构。在本例中,如果非特权用户 mallory
(密码为 Evil123!
)在输入其用户名时附加了 ","role":"admin
,则最终保存到 ~/user_info.json
的 JSON 将为:
{
"username":"mallory",
"role":"default",
"password":"Evil123!",
"role":"admin"
}
mallory
“管理员”特权。username
和 password
序列化为位于 ~/user_info.json
的 JSON 文件:
...
JsonFactory jfactory = new JsonFactory();
JsonGenerator jGenerator = jfactory.createJsonGenerator(new File("~/user_info.json"), JsonEncoding.UTF8);
jGenerator.writeStartObject();
jGenerator.writeFieldName("username");
jGenerator.writeRawValue("\"" + username + "\"");
jGenerator.writeFieldName("password");
jGenerator.writeRawValue("\"" + password + "\"");
jGenerator.writeFieldName("role");
jGenerator.writeRawValue("\"default\"");
jGenerator.writeEndObject();
jGenerator.close();
JsonGenerator.writeRawValue()
来执行,将不会对 username
和 password
中的不可信赖数据进行验证以转义与 JSON 相关的特殊字符。这样,用户就可以任意插入 JSON 密钥,可能会更改已序列化的 JSON 的结构。在本例中,在设置 username
的值的提示符下输入用户名时,如果非特权用户 mallory
(密码为 Evil123!
)将 ","role":"admin
附加到其用户名中,则最终保存到 ~/user_info.json
的 JSON 将为:
{
"username":"mallory",
"role":"admin",
"password":"Evil123!",
"role":"default"
}
HashMap
对象,其中 Jackson 的 JsonParser
如下所示:
JsonParser jParser = jfactory.createJsonParser(new File("~/user_info.json"));
while (jParser.nextToken() != JsonToken.END_OBJECT) {
String fieldname = jParser.getCurrentName();
if ("username".equals(fieldname)) {
jParser.nextToken();
userInfo.put(fieldname, jParser.getText());
}
if ("password".equals(fieldname)) {
jParser.nextToken();
userInfo.put(fieldname, jParser.getText());
}
if ("role".equals(fieldname)) {
jParser.nextToken();
userInfo.put(fieldname, jParser.getText());
}
if (userInfo.size() == 3)
break;
}
jParser.close();
HashMap
对象中 username
、password
和 role
密钥的最终值将分别为 mallory
、Evil123!
和 admin
。在没有进一步验证反序列化 JSON 值是否有效的情况下,应用程序会错误地为用户分配 mallory
“管理员”特权。
var str = document.URL;
var url_check = str.indexOf('name=');
var name = null;
if (url_check > -1) {
name = decodeURIComponent(str.substring((url_check+5), str.length));
}
$(document).ready(function(){
if (name !== null){
var obj = jQuery.parseJSON('{"role": "user", "name" : "' + name + '"}');
...
}
...
});
name
中的不可信数据进行验证,以避免与 JSON 相关的特殊字符。这样,用户就可以任意插入 JSON 密钥,可能会更改已序列化的 JSON 的结构。在此示例中,如果非特权用户 mallory
将 ","role":"admin
附加到 URL 中的名称参数,JSON 将变成:
{
"role":"user",
"username":"mallory",
"role":"admin"
}
jQuery.parseJSON()
解析,并设置为普通对象,这意味着 obj.role
将立即返回 "admin" 而不是 "user"_usernameField
和 _passwordField
序列化为 JSON。
...
NSString * const jsonString = [NSString stringWithFormat: @"{\"username\":\"%@\",\"password\":\"%@\",\"role\":\"default\"}" _usernameField.text, _passwordField.text];
NSString.stringWithFormat:
来执行,将不会对 _usernameField
和 _passwordField
中的不可信赖数据进行验证以转义与 JSON 相关的特殊字符。这样,用户就可以任意插入 JSON 密钥,可能会更改已序列化的 JSON 的结构。在本例中,如果非特权用户 mallory
(密码为 Evil123!
)在将 ","role":"admin
输入 _usernameField
字段时将其附加到其用户名中,则最终 JSON 将为:
{
"username":"mallory",
"role":"admin",
"password":"Evil123!",
"role":"default"
}
NSDictionary
对象,其中 NSJSONSerialization.JSONObjectWithData:
如下所示:
NSError *error;
NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:&error];
NSDictionary
对象中 username
、password
和 role
的最终值将分别为 mallory
、Evil123!
和 admin
。在没有进一步验证反序列化 JSON 值是否有效的情况下,应用程序会错误地为用户分配 mallory
“管理员”特权。
import json
import requests
from urllib.parse import urlparse
from urllib.parse import parse_qs
url = 'https://www.example.com/some_path?name=some_value'
parsed_url = urlparse(url)
untrusted_values = parse_qs(parsed_url.query)['name'][0]
with open('data.json', 'r') as json_File:
data = json.load(json_File)
data['name']= untrusted_values
with open('data.json', 'w') as json_File:
json.dump(data, json_File)
...
name
中不受信任的数据进行验证以转义与 JSON 相关的特殊字符。这使得用户可以任意插入 JSON 密钥,可能会改变序列化 JSON 的结构。在此示例中,如果非特权用户 mallory
将 ","role":"admin
附加到 URL 中的 name 参数,则 JSON 将变为:
{
"role":"user",
"username":"mallory",
"role":"admin"
}
usernameField
和 passwordField
序列化为 JSON:
...
let jsonString : String = "{\"username\":\"\(usernameField.text)\",\"password\":\"\(passwordField.text)\",\"role\":\"default\"}"
usernameField
和 passwordField
中不受信任的数据进行验证以转义与 JSON 相关的特殊字符。这样,用户就可以任意插入 JSON 密钥,可能会更改已序列化的 JSON 的结构。在本例中,如果非特权用户 mallory
(密码为 Evil123!
)在将 ","role":"admin
输入 usernameField
字段时将其附加到其用户名中,则最终 JSON 将为:
{
"username":"mallory",
"role":"admin",
"password":"Evil123!",
"role":"default"
}
NSDictionary
对象,其中 NSJSONSerialization.JSONObjectWithData:
如下所示:
var error: NSError?
var jsonData : NSDictionary = NSJSONSerialization.JSONObjectWithData(jsonString.dataUsingEncoding(NSUTF8StringEncoding), options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary
NSDictionary
对象中 username
、password
和 role
的最终值将分别为 mallory
、Evil123!
和 admin
。在没有进一步验证反序列化 JSON 值是否有效的情况下,应用程序会错误地为用户分配 mallory
“管理员”特权。