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 安全。
<cfquery name = "GetCredentials" dataSource = "master">
SELECT Username, Password
FROM Credentials
WHERE DataSource="users"
</cfquery>
...
<cfquery name = "GetSSNs" dataSource = "users"
username = "#Username#" password = "#Password#">
SELECT SSN
FROM Users
</cfquery>
...
master
表具有访问权限的人都能读取 Username
和 Password
的值。任何心怀不轨的雇员可以利用手中掌握的信息访问权限入侵系统。
...
<cfquery name = "GetSSNs" dataSource = "users"
username = "scott" password = "tiger">
SELECT SSN
FROM Users
</cfquery>
...
...
Credentials.basic("hardcoded-username", password);
...
...
PARAMETERS: p_input TYPE sy-mandt.
SELECT *
FROM employee_records
CLIENT SPECIFIED
INTO TABLE tab_output
WHERE mandt = p_input.
...
SY-MANDT
以外的客户端查看员工详细信息。X-Frame-Options
标头指定组帧策略。X-Frame-Options
标头指定组帧策略。localStorage
和 sessionStorage
之间传输值会不知不觉地暴露敏感信息。localStorage
和 sessionStorage
映射,以支持开发人员保留程序值。sessionStorage
映射仅在页面实例和即时浏览器会话期间为调用页面提供存储。但是,localStorage
映射会提供可供多个页面实例和浏览器实例访问的存储。此功能允许应用程序在多个浏览器选项卡或窗口中保留和使用同一信息。sessionStorage
范围移至 localStorage
,反之亦然。sessionStorage
对象中。但是,开发人员还将该信息存储在 localStorage
对象中。
...
try {
sessionStorage.setItem("userCCV", currentCCV);
} catch (e) {
if (e == QUOTA_EXCEEDED_ERR) {
alert('Quota exceeded.');
}
}
...
...
var retrieveObject = sessionStorage.getItem("userCCV");
try {
localStorage.setItem("userCCV",retrieveObject);
} catch (e) {
if (e == QUOTA_EXCEEDED_ERR) {
alert('Quota exceeded.');
}
...
var userCCV = localStorage.getItem("userCCV");
...
}
...
localStorage
对象中,此 CCV 信息在其他浏览器选项卡和新调用的浏览器中可用。这样可以绕开预期工作流的应用程序逻辑。
...
var params:Object = LoaderInfo(this.root.loaderInfo).parameters;
var url:String = String(params["url"]);
var ldr:Loader = new Loader();
var urlReq:URLRequest = new URLRequest(url);
ldr.load(urlReq);
...
MyAccountActions
和一个页面操作方法 pageAction()
。该 pageAction()
方法在访问页面 URL 时执行,且服务器不会检查是否存在反 CSRF 令牌。
<apex:page controller="MyAccountActions" action="{!pageAction}">
...
</apex:page>
public class MyAccountActions {
...
public void pageAction() {
Map<String,String> reqParams = ApexPages.currentPage().getParameters();
if (params.containsKey('id')) {
Id id = reqParams.get('id');
Account acct = [SELECT Id,Name FROM Account WHERE Id = :id];
delete acct;
}
}
...
}
<img src="http://my-org.my.salesforce.com/apex/mypage?id=YellowSubmarine" height=1 width=1/>
RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, "/new_user");
body = addToPost(body, new_username);
body = addToPost(body, new_passwd);
rb.sendRequest(body, new NewAccountCallback(callback));
RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, "http://www.example.com/new_user");
body = addToPost(body, "attacker";
body = addToPost(body, "haha");
rb.sendRequest(body, new NewAccountCallback(callback));
example.com
的管理员在网站上具有活动会话时访问了恶意页面,则他们会在毫不知情的情况下为攻击者创建一个帐户。这就是 CSRF 攻击。正是由于该应用程序无法确定请求的来源,才有可能受到 CSRF 攻击。任何请求都有可能是用户选定的合法操作,也有可能是攻击者设置的伪操作。攻击者无法查看伪请求生成的网页,因此,这种攻击技术仅适用于篡改应用程序状态的请求。
<http auto-config="true">
...
<csrf disabled="true"/>
</http>
var req = new XMLHttpRequest();
req.open("POST", "/new_user", true);
body = addToPost(body, new_username);
body = addToPost(body, new_passwd);
req.send(body);
var req = new XMLHttpRequest();
req.open("POST", "http://www.example.com/new_user", true);
body = addToPost(body, "attacker");
body = addToPost(body, "haha");
req.send(body);
example.com
的管理员在网站上具有活动会话时访问了恶意页面,则会在毫不知情的情况下为攻击者创建一个帐户。这就是 CSRF 攻击。正是由于该应用程序无法确定请求的来源,才有可能受到 CSRF 攻击。任何请求都有可能是用户选定的合法操作,也有可能是攻击者设置的伪操作。攻击者无法查看伪请求生成的网页,因此,这种攻击技术仅适用于篡改应用程序状态的请求。
<form method="POST" action="/new_user" >
Name of new user: <input type="text" name="username">
Password for new user: <input type="password" name="user_passwd">
<input type="submit" name="action" value="Create User">
</form>
<form method="POST" action="http://www.example.com/new_user">
<input type="hidden" name="username" value="hacker">
<input type="hidden" name="user_passwd" value="hacked">
</form>
<script>
document.usr_form.submit();
</script>
example.com
的管理员在网站上具有活动会话时访问了恶意页面,则会在毫不知情的情况下为攻击者创建一个帐户。这就是 CSRF 攻击。正是由于该应用程序无法确定请求的来源,才有可能受到 CSRF 攻击。任何请求都有可能是用户选定的合法操作,也有可能是攻击者设置的伪操作。攻击者无法查看伪请求生成的网页,因此,这种攻击技术仅适用于篡改应用程序状态的请求。buyItem
控制器方法的 CSRF 保护。
+ nocsrf
POST /buyItem controllers.ShopController.buyItem
shop.com
上具有活动会话时被诱骗访问了恶意网页,她会在毫不知情的情况下为攻击者购买物品。 这就是 CSRF 攻击。 正是由于该应用程序无法确定请求的来源,才有可能受到 CSRF 攻击。 任何请求都有可能是用户选定的合法操作,也有可能是攻击者设置的伪操作。 攻击者无法查看伪请求生成的网页,因此,这种攻击技术仅适用于篡改应用程序状态的请求。
<form method="POST" action="/new_user" >
Name of new user: <input type="text" name="username">
Password for new user: <input type="password" name="user_passwd">
<input type="submit" name="action" value="Create User">
</form>
<form method="POST" action="http://www.example.com/new_user">
<input type="hidden" name="username" value="hacker">
<input type="hidden" name="user_passwd" value="hacked">
</form>
<script>
document.usr_form.submit();
</script>
example.com
的管理员在网站上具有活动会话时访问了恶意页面,则会在毫不知情的情况下为攻击者创建一个帐户。这就是 CSRF 攻击。正是由于该应用程序无法确定请求的来源,才有可能受到 CSRF 攻击。任何请求都有可能是用户选定的合法操作,也有可能是攻击者设置的伪操作。攻击者无法查看伪请求生成的网页,因此,这种攻击技术仅适用于篡改应用程序状态的请求。
@GetMapping("/ai")
String generation(String userInput) {
return this.chatClient.prompt()
.user(userInput)
.call()
.content();
}
message
检索响应,并将其显示给用户。
const openai = new OpenAI({
apiKey: ...,
});
const chatCompletion = await openai.chat.completions.create(...);
message = res.choices[0].message.content
console.log(chatCompletion.choices[0].message.content)
val chatCompletionRequest = ChatCompletionRequest(
model = ModelId("gpt-3.5-turbo"),
messages = listOf(...)
)
val completion: ChatCompletion = openAI.chatCompletion(chatCompletionRequest)
response.getOutputStream().print(completion.choices[0].message)
message
检索响应,并将其显示给用户。
client = openai.OpenAI()
res = client.chat.completions.create(...)
message = res.choices[0].message.content
self.writeln(f"<p>{message}<\p>")
chatService.createCompletion(
text,
settings = CreateCompletionSettings(...)
).map(completion =>
val html = Html(completion.choices.head.text)
Ok(html) as HTML
)
...
text/html
MIME 类型。因此,仅当响应使用此 MIME 类型或者使用的任何其他类型同样强制浏览器将响应呈现为 HTML 或可执行 SVG 图像 (image/svg+xml
) 和 XML 文档 (application/xml
) 等脚本的其他文档时,才有可能使用 XSS。 application/octet-stream
等 MIME 类型时执行脚本。但是,Internet Explorer 等某些浏览器可执行称为 Content Sniffing
的内容。Content Sniffing 涉及到忽略提供的 MIME 类型并尝试根据响应的内容推断正确的 MIME 类型。text/html
是可能导致 XSS 漏洞的唯一 MIME 类型。可执行 SVG 图像 (image/svg+xml
) 和 XML 文档 (application/xml
) 等脚本的其他文档可能导致 XSS 漏洞,无论浏览器是否执行 Content Sniffing 都是如此。 <html><body><script>alert(1)</script></body></html>
等响应可能呈现为 HTML,即使其 content-type
标头设置为 application/octet-stream
, multipart-mixed
等也是如此。application/octet-stream
响应中的用户数据。
@RestController
public class SomeResource {
@RequestMapping(value = "/test", produces = {MediaType.APPLICATION_OCTET_STREAM_VALUE})
public String response5(@RequestParam(value="name") String name){
return name;
}
}
name
参数设置为 <html><body><script>alert(1)</script></body></html>
,则服务器将生成以下响应:
HTTP/1.1 200 OK
Content-Length: 51
Content-Type: application/octet-stream
Connection: Closed
<html><body><script>alert(1)</script></body></html>
text/html
MIME 类型。因此,仅当响应使用此 MIME 类型或者使用的任何其他类型同样强制浏览器将响应呈现为 HTML 或可执行 SVG 图像 (image/svg+xml
) 和 XML 文档 (application/xml
) 等脚本的其他文档时,才有可能使用 XSS。 application/json
等 MIME 类型时执行脚本。但是,Internet Explorer 等某些浏览器可执行称为 Content Sniffing
的内容。Content Sniffing 涉及到忽略提供的 MIME 类型并尝试根据响应的内容推断正确的 MIME 类型。text/html
是可能导致 XSS 漏洞的唯一 MIME 类型。可执行 SVG 图像 (image/svg+xml
) 和 XML 文档 (application/xml
) 等脚本的其他文档可能导致 XSS 漏洞,无论浏览器是否执行 Content Sniffing 都是如此。 <html><body><script>alert(1)</script></body></html>
等响应可能呈现为 HTML,即使其 content-type
标头设置为 application/json
也是如此。application/json
响应中的用户数据。
def mylambda_handler(event, context):
name = event['name']
response = {
"statusCode": 200,
"body": "{'name': name}",
"headers": {
'Content-Type': 'application/json',
}
}
return response
name
参数设置为 <html><body><script>alert(1)</script></body></html>
,则服务器将生成以下响应:
HTTP/1.1 200 OK
Content-Length: 88
Content-Type: application/json
Connection: Closed
{'name': '<html><body><script>alert(1)</script></body></html>'}