SameSite
em cookies de sessão.SameSite
limita o escopo do cookie para que ele seja anexado apenas a uma solicitação se a solicitação for gerada do contexto primário ou do mesmo site. Isso ajuda a proteger os cookies contra ataques CSRF (Cross-Site Request Forgery). O parâmetro SameSite
pode ter os três seguintes valores:Strict
, os cookies são enviados apenas com as solicitações na navegação de nível superior.Lax
, os cookies são enviados com navegação de nível superior do mesmo host, bem como solicitações GET originadas para o host de sites de terceiros. Por exemplo, suponha que haja um site de terceiros que tenha tags iframe
ou href
para o site host. Se um usuário seguir o link, a solicitação incluirá o cookie.SameSite
como None
para cookies de sessão.
...
Cookie cookie = new Cookie('name', 'Foo', path, -1, true, 'None');
...
SameSite
em cookies de sessão.SameSite
limita o escopo do cookie de forma que ele só seja anexado a uma solicitação se ela for gerada do contexto primário ou do mesmo site. Isso ajuda a proteger os cookies contra ataques CSRF (Cross-Site Request Forgery). O atributo SameSite
pode ter os três seguintes valores:Strict
, os cookies são enviados apenas com as solicitações na navegação de nível superior.Lax
, os cookies são enviados com navegação de nível superior do mesmo host, bem como solicitações GET originadas de sites de terceiros, incluindo aqueles que têm as tags iframe
ou href
vinculadas ao site host. Se um usuário seguir o link, a solicitação incluirá o cookie.SameSite
para cookies de sessão.
...
CookieOptions opt = new CookieOptions()
{
SameSite = SameSiteMode.None;
};
context.Response.Cookies.Append("name", "Foo", opt);
...
SameSite
em cookies de sessão.SameSite
limita o escopo do cookie de forma que ele só seja anexado a uma solicitação se ela for gerada do contexto primário ou do mesmo site. Isso ajuda a proteger os cookies contra ataques CSRF (Cross-Site Request Forgery). O atributo SameSite
pode ter os três seguintes valores:Strict
, os cookies são enviados apenas com as solicitações na navegação de nível superior.Lax
, os cookies são enviados com navegação de nível superior do mesmo host, bem como solicitações GET originadas para o host de sites de terceiros. Por exemplo, suponha que haja um site de terceiros que tenha tags iframe
ou href
para o site host. Se um usuário seguir o link, a solicitação incluirá o cookie.SameSite
para cookies de sessão.
c := &http.Cookie{
Name: "cookie",
Value: "samesite-none",
SameSite: http.SameSiteNoneMode,
}
SameSite
em cookies de sessão.SameSite
limita o escopo do cookie de forma que ele só seja anexado a uma solicitação se ela for gerada do contexto primário ou do mesmo site. Isso ajuda a proteger os cookies contra ataques CSRF (Cross-Site Request Forgery). O atributo SameSite
pode ter os três seguintes valores:Strict
, os cookies são enviados apenas com as solicitações na navegação de nível superior.Lax
, os cookies são enviados com navegação de nível superior do mesmo host, bem como solicitações GET originadas de sites de terceiros, incluindo aqueles que têm as tags iframe
ou href
vinculadas ao site host. Por exemplo, suponha que haja um site de terceiros que tenha tags iframe
ou href
para o site host. Se um usuário seguir o link, a solicitação incluirá o cookie.SameSite
para cookies de sessão.
ResponseCookie cookie = ResponseCookie.from("myCookie", "myCookieValue")
...
.sameSite("None")
...
SameSite
em cookies de sessão.SameSite
limita o escopo do cookie de forma que ele só seja anexado a uma solicitação se ela for gerada do contexto primário ou do mesmo site. Isso ajuda a proteger os cookies contra ataques CSRF (Cross-Site Request Forgery). O atributo SameSite
pode ter os três seguintes valores:Strict
, os cookies são enviados apenas com as solicitações na navegação de nível superior.Lax
, os cookies são enviados com navegação de nível superior do mesmo host, bem como solicitações GET originadas de sites de terceiros, incluindo aqueles que têm as tags iframe
ou href
vinculadas ao site host. Por exemplo, suponha que haja um site de terceiros que tenha tags iframe
ou href
para o site host. Se um usuário seguir o link, a solicitação incluirá o cookie.SameSite
para cookies de sessão.
app.get('/', function (req, res) {
...
res.cookie('name', 'Foo', { sameSite: false });
...
}
SameSite
em cookies de sessão.SameSite
limita o escopo do cookie de forma que ele só seja anexado a uma solicitação se ela for gerada do contexto primário ou do mesmo site. Isso ajuda a proteger os cookies contra ataques CSRF (Cross-Site Request Forgery). O atributo SameSite
pode ter os três seguintes valores:Strict
, os cookies são enviados apenas com as solicitações na navegação de nível superior. Lax
, os cookies são enviados com navegação de nível superior do mesmo host, bem como solicitações GET originadas para o host de sites de terceiros. Por exemplo, suponha que haja um site de terceiros que tenha tags iframe
ou href
para o site host. Se um usuário seguir o link, a solicitação incluirá o cookie.SameSite
para cookies de sessão.
ini_set("session.cookie_samesite", "None");
SameSite
em cookies de sessão.samesite
limita o escopo do cookie para que ele seja anexado apenas a uma solicitação se a solicitação for gerada do contexto primário ou do mesmo site. Isso ajuda a proteger os cookies contra ataques CSRF (Cross-Site Request Forgery). O parâmetro samesite
pode ter os três seguintes valores:Strict
, os cookies são enviados apenas com as solicitações na navegação de nível superior.Lax
, os cookies são enviados com navegação de nível superior do mesmo host, bem como solicitações GET originadas para o host de sites de terceiros. Por exemplo, suponha que haja um site de terceiros que tenha tags iframe
ou href
para o site host. Se um usuário seguir o link, a solicitação incluirá o cookie.SameSite
para cookies de sessão.
response.set_cookie("cookie", value="samesite-none", samesite=None)
.example.com
". Isso expõe o cookie a todos os aplicativos Web no domínio base e em quaisquer subdomínios. Como cookies frequentemente contêm informações confidenciais, como identificadores de sessão, compartilhar cookies entre aplicativos pode fazer com que uma vulnerabilidade em um aplicativo comprometa outro.http://secure.example.com/
e esse aplicativo defina uma ID de cookie de sessão com o domínio ".example.com
" quando um usuário faz logon.
HttpCookie cookie = new HttpCookie("sessionID", sessionID);
cookie.Domain = ".example.com";
http://insecure.example.com/
e ele contenha uma vulnerabilidade de criação de scripts entre sites. Qualquer usuário autenticado em http://secure.example.com
que navegar até http://insecure.example.com
correrá o risco de expor seu cookie de sessão de http://secure.example.com
.insecure.example.com
para criar o seu próprio cookie excessivamente amplo que substitui o cookie de secure.example.com
..example.com
". Isso expõe o cookie a todos os aplicativos Web no domínio base e em quaisquer subdomínios. Como cookies carregam frequentemente informações confidenciais, como identificadores de sessão, compartilhar cookies entre aplicativos pode fazer com que uma vulnerabilidade em um aplicativo comprometa outro aplicativo.http://secure.example.com/
e esse aplicativo defina uma ID de cookie de sessão com o domínio ".example.com
" quando um usuário faz logon.
cookie := http.Cookie{
Name: "sessionID",
Value: getSessionID(),
Domain: ".example.com",
}
...
http://insecure.example.com/
e ele contenha uma vulnerabilidade de cross-site scripting. Qualquer usuário autenticado em http://secure.example.com
que navegar até http://insecure.example.com
correrá o risco de expor seu cookie de sessão de http://secure.example.com
.insecure.example.com
para criar seu próprio cookie excessivamente amplo que substitui o cookie em Secure.example.com
..example.com
". Isso expõe o cookie a todos os aplicativos Web no domínio base e em quaisquer subdomínios. Como cookies frequentemente contêm informações confidenciais, como identificadores de sessão, compartilhar cookies entre aplicativos pode fazer com que uma vulnerabilidade em um aplicativo comprometa outro.http://secure.example.com/
e esse aplicativo defina uma ID de cookie de sessão com o domínio ".example.com
" quando um usuário faz logon.
Cookie cookie = new Cookie("sessionID", sessionID);
cookie.setDomain(".example.com");
http://insecure.example.com/
e ele contenha uma vulnerabilidade de criação de scripts entre sites. Qualquer usuário autenticado em http://secure.example.com
que navegar até http://insecure.example.com
correrá o risco de expor seu cookie de sessão de http://secure.example.com
.insecure.example.com
para criar o seu próprio cookie excessivamente amplo que substitui o cookie de secure.example.com
..example.com
". Isso expõe o cookie a todos os aplicativos Web no domínio base e em quaisquer subdomínios. Como cookies frequentemente contêm informações confidenciais, como identificadores de sessão, compartilhar cookies entre aplicativos pode fazer com que uma vulnerabilidade em um aplicativo comprometa outro.http://secure.example.com/
e esse aplicativo defina uma ID de cookie de sessão com o domínio ".example.com
" quando um usuário faz logon.
cookie_options = {};
cookie_options.domain = '.example.com';
...
res.cookie('important_cookie', info, cookie_options);
http://insecure.example.com/
e ele contenha uma vulnerabilidade de criação de scripts entre sites. Qualquer usuário autenticado em http://secure.example.com
que navegar até http://insecure.example.com
correrá o risco de expor seu cookie de sessão de http://secure.example.com
.insecure.example.com
para criar o seu próprio cookie excessivamente amplo que substitui o cookie de secure.example.com
..example.com
". Isso expõe o cookie a todos os aplicativos Web no domínio base e em quaisquer subdomínios. Como cookies frequentemente contêm informações confidenciais, como identificadores de sessão, compartilhar cookies entre aplicativos pode fazer com que uma vulnerabilidade em um aplicativo comprometa outro.http://secure.example.com/
e esse aplicativo defina uma ID de cookie de sessão com o domínio ".example.com
" quando um usuário faz logon.
...
NSDictionary *cookieProperties = [NSDictionary dictionary];
...
[cookieProperties setValue:@".example.com" forKey:NSHTTPCookieDomain];
...
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
...
http://insecure.example.com/
e ele contenha uma vulnerabilidade de criação de scripts entre sites. Qualquer usuário autenticado em http://secure.example.com
que navegar até http://insecure.example.com
correrá o risco de expor seu cookie de sessão de http://secure.example.com
.insecure.example.com
para criar o seu próprio cookie excessivamente amplo que substitui o cookie de secure.example.com
..example.com
". Isso expõe o cookie a todos os aplicativos Web no domínio base e em quaisquer subdomínios. Como cookies frequentemente contêm informações confidenciais, como identificadores de sessão, compartilhar cookies entre aplicativos pode fazer com que uma vulnerabilidade em um aplicativo comprometa outro.http://secure.example.com/
e esse aplicativo defina uma ID de cookie de sessão com o domínio ".example.com
" quando um usuário faz logon.
setcookie("mySessionId", getSessionID(), 0, "/", ".example.com", true, true);
http://insecure.example.com/
e ele contenha uma vulnerabilidade de criação de scripts entre sites. Qualquer usuário autenticado em http://secure.example.com
que navegar até http://insecure.example.com
correrá o risco de expor seu cookie de sessão de http://secure.example.com
.insecure.example.com
para criar o seu próprio cookie excessivamente amplo que substitui o cookie de secure.example.com
..example.com
". Isso expõe o cookie a todos os aplicativos Web no domínio base e em quaisquer subdomínios. Como cookies frequentemente contêm informações confidenciais, como identificadores de sessão, compartilhar cookies entre aplicativos pode fazer com que uma vulnerabilidade em um aplicativo comprometa outro.http://secure.example.com/
e esse aplicativo defina uma ID de cookie de sessão com o domínio ".example.com
" quando um usuário faz logon.
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/
e ele contenha uma vulnerabilidade de criação de scripts entre sites. Qualquer usuário autenticado em http://secure.example.com
que navegar até http://insecure.example.com
correrá o risco de expor seu cookie de sessão de http://secure.example.com
.insecure.example.com
para criar o cookie próprio e excessivamente amplo que substitui o cookie secure.example.com
..example.com
". Isso expõe o cookie a todos os aplicativos Web no domínio base e em quaisquer subdomínios. Como cookies frequentemente contêm informações confidenciais, como identificadores de sessão, compartilhar cookies entre aplicativos pode fazer com que uma vulnerabilidade em um aplicativo comprometa outro.http://secure.example.com/
e esse aplicativo defina uma ID de cookie de sessão com o domínio ".example.com
" quando um usuário faz logon.
Ok(Html(command)).withCookies(Cookie("sessionID", sessionID, domain = Some(".example.com")))
http://insecure.example.com/
e ele contenha uma vulnerabilidade de cross-site scripting. Qualquer usuário autenticado em http://secure.example.com
que navegar até http://insecure.example.com
correrá o risco de expor seu cookie de sessão de http://secure.example.com
.insecure.example.com
para criar o seu próprio cookie excessivamente amplo que substitui o cookie de secure.example.com
..example.com
". Isso expõe o cookie a todos os aplicativos Web no domínio base e em quaisquer subdomínios. Como cookies frequentemente contêm informações confidenciais, como identificadores de sessão, compartilhar cookies entre aplicativos pode fazer com que uma vulnerabilidade em um aplicativo comprometa outro.http://secure.example.com/
e esse aplicativo defina uma ID de cookie de sessão com o domínio ".example.com
" quando um usuário faz logon.
...
let properties = [
NSHTTPCookieDomain: ".example.com",
NSHTTPCookiePath: "/service",
NSHTTPCookieName: "foo",
NSHTTPCookieValue: "bar",
NSHTTPCookieSecure: true
]
let cookie : NSHTTPCookie? = NSHTTPCookie(properties:properties)
...
http://insecure.example.com/
e ele contenha uma vulnerabilidade de criação de scripts entre sites. Qualquer usuário autenticado em http://secure.example.com
que navegar até http://insecure.example.com
correrá o risco de expor seu cookie de sessão de http://secure.example.com
.insecure.example.com
para criar o seu próprio cookie excessivamente amplo que substitui o cookie de secure.example.com
./
"). Fazer isso expõe o cookie a todos os aplicativos Web no domínio. Como cookies carregam frequentemente informações confidenciais, como identificadores de sessão, compartilhar cookies entre aplicativos pode fazer com que uma vulnerabilidade em um aplicativo comprometa outro aplicativo.http://communitypages.example.com/MyForum
e esse aplicativo defina um cookie de ID de sessão com o caminho "/
" quando os usuários fazem logon no fórum. Por exemplo:
...
String path = '/';
Cookie cookie = new Cookie('sessionID', sessionID, path, maxAge, true, 'Strict');
...
http://communitypages.example.com/EvilSite
e publique um link para esse site no fórum. Quando um usuário do fórum clicar nesse link, o navegador enviará o cookie definido por /MyForum
ao aplicativo em execução em /EvilSite
. Roubando a ID de sessão, o invasor pode comprometer a conta de qualquer usuário do fórum que tenha navegado até /EvilSite
./EvilSite
para criar o seu próprio cookie excessivamente amplo que substitui o cookie de /MyForum
./
". No entanto, fazer isso expõe o cookie a todos os aplicativos Web no mesmo domínio. Como cookies carregam frequentemente informações confidenciais, como identificadores de sessão, compartilhar cookies entre aplicativos pode fazer com que uma vulnerabilidade em um aplicativo comprometa outro aplicativo.http://communitypages.example.com/MyForum
e esse aplicativo defina um cookie de ID de sessão com o caminho "/
" quando os usuários fazem logon no fórum.
HttpCookie cookie = new HttpCookie("sessionID", sessionID);
cookie.Path = "/";
http://communitypages.example.com/EvilSite
e publique um link para esse site no fórum. Quando um usuário do fórum clicar nesse link, o navegador enviará o cookie definido por /MyForum
ao aplicativo em execução em /EvilSite
. Roubando o ID da sessão, o invasor consegue comprometer a conta de qualquer usuário do fórum que tiver navegado até /EvilSite
./EvilSite
para criar o seu próprio cookie excessivamente amplo que substitui o cookie de /MyForum
./
"). Fazer isso expõe o cookie a todos os aplicativos Web no domínio. Como cookies carregam frequentemente informações confidenciais, como identificadores de sessão, compartilhar cookies entre aplicativos pode fazer com que uma vulnerabilidade em um aplicativo comprometa outro aplicativo.http://communitypages.example.com/MyForum
e esse aplicativo defina um cookie de ID de sessão com o caminho "/
" quando os usuários fazem logon no fórum.
cookie := http.Cookie{
Name: "sessionID",
Value: sID,
Expires: time.Now().AddDate(0, 0, 1),
Path: "/",
}
...
http://communitypages.example.com/EvilSite
e publique um link para esse site no fórum. Quando um usuário do fórum clica nesse link, o navegador envia o cookie definido por /MyForum
para o aplicativo em execução em /EvilSite
. Roubando a ID de sessão, o invasor pode comprometer a conta de qualquer usuário do fórum que tenha navegado até /EvilSite
./EvilSite
para criar seu próprio cookie excessivamente amplo que substitui o cookie em /MyForum
./
"). Isso expõe o cookie a todos os aplicativos Web no domínio. Como cookies frequentemente contêm informações confidenciais, como identificadores de sessão, compartilhar cookies entre aplicativos pode fazer com que uma vulnerabilidade em um aplicativo comprometa outro.http://communitypages.example.com/MyForum
e esse aplicativo defina um cookie de ID de sessão com o caminho "/
" quando os usuários fazem logon no fórum.
Cookie cookie = new Cookie("sessionID", sessionID);
cookie.setPath("/");
http://communitypages.example.com/EvilSite
e publique um link para esse site no fórum. Quando um usuário do fórum clicar nesse link, o navegador enviará o cookie definido por /MyForum
ao aplicativo em execução em /EvilSite
. Roubando o ID da sessão, o invasor consegue comprometer a conta de qualquer usuário do fórum que tiver navegado até /EvilSite
./EvilSite
para criar o seu próprio cookie excessivamente amplo que substitui o cookie de /MyForum
./
"). Isso expõe o cookie a todos os aplicativos Web no domínio. Como cookies frequentemente contêm informações confidenciais, como identificadores de sessão, compartilhar cookies entre aplicativos pode fazer com que uma vulnerabilidade em um aplicativo comprometa outro.http://communitypages.example.com/MyForum
e esse aplicativo defina um cookie de ID de sessão com o caminho "/
" quando os usuários fazem logon no fórum.
cookie_options = {};
cookie_options.path = '/';
...
res.cookie('important_cookie', info, cookie_options);
http://communitypages.example.com/EvilSite
e publique um link para esse site no fórum. Quando um usuário do fórum clicar nesse link, o navegador enviará o cookie definido por /MyForum
ao aplicativo em execução em /EvilSite
. Roubando o ID da sessão, o invasor consegue comprometer a conta de qualquer usuário do fórum que tiver navegado até /EvilSite
./EvilSite
para criar o seu próprio cookie excessivamente amplo que substitui o cookie de /MyForum
./
"). Isso expõe o cookie a todos os aplicativos Web no domínio. Como cookies frequentemente contêm informações confidenciais, como identificadores de sessão, compartilhar cookies entre aplicativos pode fazer com que uma vulnerabilidade em um aplicativo comprometa outro.http://communitypages.example.com/MyForum
e esse aplicativo defina um cookie de ID de sessão com o caminho "/
" quando os usuários fazem logon no fórum.
...
NSDictionary *cookieProperties = [NSDictionary dictionary];
...
[cookieProperties setValue:@"/" forKey:NSHTTPCookiePath];
...
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
...
http://communitypages.example.com/EvilSite
e publique um link para esse site no fórum. Quando um usuário do fórum clicar nesse link, o navegador enviará o cookie definido por /MyForum
ao aplicativo em execução em /EvilSite
. Roubando o ID da sessão, o invasor consegue comprometer a conta de qualquer usuário do fórum que tiver navegado até /EvilSite
./EvilSite
para criar o seu próprio cookie excessivamente amplo que substitui o cookie de /MyForum
./
"). Isso expõe o cookie a todos os aplicativos Web no domínio. Como cookies frequentemente contêm informações confidenciais, como identificadores de sessão, compartilhar cookies entre aplicativos pode fazer com que uma vulnerabilidade em um aplicativo comprometa outro.http://communitypages.example.com/MyForum
e esse aplicativo defina um cookie de ID de sessão com o caminho "/
" quando os usuários fazem logon no fórum.
setcookie("mySessionId", getSessionID(), 0, "/", "communitypages.example.com", true, true);
http://communitypages.example.com/EvilSite
e publique um link para esse site no fórum. Quando um usuário do fórum clicar nesse link, o navegador enviará o cookie definido por /MyForum
ao aplicativo em execução em /EvilSite
. Roubando o ID da sessão, o invasor consegue comprometer a conta de qualquer usuário do fórum que tiver navegado até /EvilSite
./EvilSite
para criar o seu próprio cookie excessivamente amplo que substitui o cookie de /MyForum
./
"). Isso expõe o cookie a todos os aplicativos Web no domínio. Como cookies frequentemente contêm informações confidenciais, como identificadores de sessão, compartilhar cookies entre aplicativos pode fazer com que uma vulnerabilidade em um aplicativo comprometa outro.http://communitypages.example.com/MyForum
e esse aplicativo defina um cookie de ID de sessão com o caminho "/
" quando os usuários fazem logon no fórum.
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
e publique um link para esse site no fórum. Quando um usuário do fórum clicar nesse link, o navegador enviará o cookie definido por /MyForum
ao aplicativo em execução em /EvilSite
. Roubando o ID da sessão, o invasor consegue comprometer a conta de qualquer usuário do fórum que tiver navegado até /EvilSite
./EvilSite
para criar o cookie próprio e excessivamente amplo que substitui o cookie /MyForum
./
"). Isso expõe o cookie a todos os aplicativos Web no domínio. Como cookies frequentemente contêm informações confidenciais, como identificadores de sessão, compartilhar cookies entre aplicativos pode fazer com que uma vulnerabilidade em um aplicativo comprometa outro.http://communitypages.example.com/MyForum
e esse aplicativo defina um cookie de ID de sessão com o caminho "/
" quando os usuários fazem logon no fórum.
Ok(Html(command)).withCookies(Cookie("sessionID", sessionID, path = "/"))
http://communitypages.example.com/EvilSite
e publique um link para esse site no fórum. Quando um usuário do fórum clicar nesse link, o navegador enviará o cookie definido por /MyForum
ao aplicativo em execução em /EvilSite
. Roubando o ID da sessão, o invasor consegue comprometer a conta de qualquer usuário do fórum que tiver navegado até /EvilSite
./EvilSite
para criar o seu próprio cookie excessivamente amplo que substitui o cookie de /MyForum
./
"). Isso expõe o cookie a todos os aplicativos Web no domínio. Como cookies frequentemente contêm informações confidenciais, como identificadores de sessão, compartilhar cookies entre aplicativos pode fazer com que uma vulnerabilidade em um aplicativo comprometa outro.http://communitypages.example.com/MyForum
e esse aplicativo defina um cookie de ID de sessão com o caminho "/
" quando os usuários fazem logon no fórum.
...
let properties = [
NSHTTPCookieDomain: "www.example.com",
NSHTTPCookiePath: "/",
NSHTTPCookieName: "foo",
NSHTTPCookieValue: "bar",
NSHTTPCookieSecure: true
]
let cookie : NSHTTPCookie? = NSHTTPCookie(properties:properties)
...
http://communitypages.example.com/EvilSite
e publique um link para esse site no fórum. Quando um usuário do fórum clicar nesse link, o navegador enviará o cookie definido por /MyForum
ao aplicativo em execução em /EvilSite
. Roubando o ID da sessão, o invasor consegue comprometer a conta de qualquer usuário do fórum que tiver navegado até /EvilSite
./EvilSite
para criar o seu próprio cookie excessivamente amplo que substitui o cookie de /MyForum
..example.com
". No entanto, fazer isso expõe o cookie de sessão a todos os aplicativos Web no nome do domínio base e em quaisquer subdomínios. O vazamento de cookies de sessão pode comprometer contas.http://secure.example.com/
e esse aplicativo defina uma ID de cookie de sessão com o domínio ".example.com
" quando os usuários fazem login.
server.servlet.session.cookie.domain=.example.com
http://insecure.example.com/
e ele contenha uma vulnerabilidade de Cross-Site Scripting. Qualquer usuário autenticado em http://secure.example.com
que navegar até http://insecure.example.com
correrá o risco de expor seu cookie de sessão de http://secure.example.com
..example.com
". Isso expõe o cookie de sessão a todos os aplicativos Web sob o domínio base e todos os subdomínios. O compartilhamento de cookies de sessão entre aplicativos pode causar uma vulnerabilidade em um aplicativo, causando um comprometimento em outro.http://secure.example.com/
e esse aplicativo defina uma ID de cookie de sessão com o domínio ".example.com
" quando os usuários fazem login.
session_set_cookie_params(0, "/", ".example.com", true, true);
http://insecure.example.com/
e ele contenha uma vulnerabilidade de criação de scripts entre sites. Qualquer usuário autenticado em http://secure.example.com
que navegar até http://insecure.example.com
correrá o risco de expor seu cookie de sessão de http://secure.example.com
./
"). Isso expõe o cookie a todos os aplicativos Web no mesmo domínio. O vazamento de cookies de sessão pode comprometer contas porque um invasor pode roubar o cookie de sessão usando uma vulnerabilidade em qualquer um dos aplicativos no domínio.http://communitypages.example.com/MyForum
e esse aplicativo defina um cookie de sessão com o caminho "/
" quando os usuários fazem logon no fórum. Por exemplo:
server.servlet.session.cookie.path=/
http://communitypages.example.com/EvilSite
e publique um link para esse site no fórum. Quando um usuário do fórum clicar nesse link, o navegador enviará o cookie de sessão definido por /MyForum
para o aplicativo em execução em /EvilSite
. Usando o cookie de sessão fornecido pelo usuário em /MyForum
, o invasor pode comprometer a conta de qualquer usuário do fórum que navegue para /EvilSite
./
"). Isso expõe o cookie a todos os aplicativos Web no mesmo domínio. O vazamento de cookies de sessão pode comprometer contas porque um invasor pode roubar o cookie de sessão usando uma vulnerabilidade em qualquer um dos aplicativos no domínio.http://communitypages.example.com/MyForum
e esse aplicativo defina um cookie de sessão com o caminho "/
" quando os usuários fazem logon no fórum.
session_set_cookie_params(0, "/", "communitypages.example.com", true, true);
http://communitypages.example.com/EvilSite
e publique um link para esse site no fórum. Quando um usuário do fórum clicar nesse link, o navegador enviará o cookie de sessão definido por /MyForum
para o aplicativo em execução em /EvilSite
. Ao roubar o cookie de sessão, o invasor pode comprometer a conta de qualquer usuário do fórum que tenha navegado até /EvilSite
.SameSite
em cookies de sessão não está definido como Strict
.SameSite
limita o escopo do cookie para que ele seja anexado apenas a uma solicitação se a solicitação for gerada do contexto primário ou do mesmo site. Isso ajuda a proteger os cookies contra ataques CSRF (Cross-Site Request Forgery). O parâmetro SameSite
pode ter os três seguintes valores:Strict
, os cookies são enviados apenas com as solicitações na navegação de nível superior.Lax
, os cookies são enviados com navegação de nível superior do mesmo host, bem como solicitações GET originadas para o host de sites de terceiros. Por exemplo, suponha que haja um site de terceiros que tenha tags iframe
ou href
para o site host. Se um usuário seguir o link, a solicitação incluirá o cookie.SameSite
como Lax
para cookies de sessão.
...
Cookie cookie = new Cookie('name', 'Foo', path, -1, true, 'Lax');
...
SameSite
em cookies de sessão não está definido como Strict
.SameSite
protege cookies contra ataques como CSRF (Cross-Site Request Forgery). Os cookies de sessão representam um usuário para o site para que ele possa executar ações autorizadas. No entanto, o navegador envia automaticamente os cookies com a solicitação e, portanto, os usuários e os sites confiam implicitamente no navegador para autorização. Um invasor pode usar indevidamente essa confiança e fazer uma solicitação ao site em nome do usuário incorporando links no atributo href
e src
de tags como link
e iframe
em páginas de sites de terceiros que um invasor controla. Se um invasor conseguir atrair um usuário desavisado para o site de terceiros que ele controla, ele poderá fazer solicitações que incluam automaticamente o cookie de sessão que autoriza o usuário, autorizando efetivamente o invasor como se fosse o usuário.SameSite
como Strict
nos cookies de sessão. Isso restringe o navegador a anexar cookies apenas a solicitações de navegação de nível superior ou originadas do mesmo site. Solicitações originadas de sites de terceiros por meio de links em várias tags, como iframe
, img
e form
, não têm esses cookies e, portanto, evitam que o site execute ações que o usuário possa não ter autorizado.SameSite
como Lax
para cookies de sessão.
...
CookieOptions opt = new CookieOptions()
{
SameSite = SameSiteMode.Lax;
};
context.Response.Cookies.Append("name", "Foo", opt);
...
SameSite
em cookies de sessão não é definido como SameSiteStrictMode
.SameSite
protege cookies contra ataques como CSRF (Cross-Site Request Forgery). Os cookies de sessão representam um usuário para o site para que ele possa executar ações autorizadas. No entanto, o navegador envia automaticamente os cookies com a solicitação e, portanto, os usuários e os sites confiam implicitamente no navegador para autorização. Um invasor pode usar indevidamente essa confiança e fazer uma solicitação ao site em nome do usuário incorporando links no atributo href
e src
de tags como link
e iframe
em páginas de sites de terceiros que um invasor controla. Se um invasor conseguir atrair um usuário desavisado para o site de terceiros que ele controla, ele poderá fazer solicitações que incluam automaticamente o cookie de sessão que autoriza o usuário, autorizando efetivamente o invasor como se fosse o usuário.SameSiteStrictMode
para SameSite
, o que restringe o navegador a anexar cookies apenas a solicitações de navegação de nível superior ou originadas do mesmo site. Solicitações originadas de sites de terceiros por meio de links em várias tags, como iframe
, img
e form
, não têm esses cookies e, portanto, evitam que o site execute ações que o usuário possa não ter autorizado.SameSiteLaxMode
no atributo SameSite
para cookies de sessão.
c := &http.Cookie{
Name: "cookie",
Value: "samesite-lax",
SameSite: http.SameSiteLaxMode,
}
SameSite
em cookies de sessão não está definido como Strict
.SameSite
protege cookies contra ataques como CSRF (Cross-Site Request Forgery). Os cookies de sessão representam um usuário para o site para que ele possa executar ações autorizadas. No entanto, o navegador envia automaticamente os cookies com a solicitação e, portanto, os usuários e os sites confiam implicitamente no navegador para autorização. Um invasor pode usar indevidamente essa confiança e fazer uma solicitação ao site em nome do usuário incorporando links no atributo href
e src
de tags como link
e iframe
em páginas de sites de terceiros que um invasor controla. Se um invasor conseguir atrair um usuário desavisado para o site de terceiros que ele controla, ele poderá fazer solicitações que incluam automaticamente o cookie de sessão que autoriza o usuário, autorizando efetivamente o invasor como se fosse o usuário.SameSite
como Strict
nos cookies de sessão. Isso restringe o navegador a anexar cookies apenas a solicitações de navegação de nível superior ou originadas do mesmo site. Solicitações originadas de sites de terceiros por meio de links em várias tags, como iframe
, img
e form
, não têm esses cookies e, portanto, evitam que o site execute ações que o usuário possa não ter autorizado.SameSite
como Lax
para cookies de sessão.
ResponseCookie cookie = ResponseCookie.from("myCookie", "myCookieValue")
...
.sameSite("Lax")
...
}
SameSite
em cookies de sessão não está definido como Strict
.SameSite
protege cookies contra ataques como CSRF (Cross-Site Request Forgery). Os cookies de sessão representam um usuário para o site para que ele possa executar ações autorizadas. No entanto, o navegador envia automaticamente os cookies com a solicitação e, portanto, os usuários e os sites confiam implicitamente no navegador para autorização. Um invasor pode usar indevidamente essa confiança e fazer uma solicitação ao site em nome do usuário incorporando links no atributo href
e src
de tags como link
e iframe
em páginas de sites de terceiros que um invasor controla. Se um invasor conseguir atrair um usuário desavisado para o site de terceiros que ele controla, ele poderá fazer solicitações que incluam automaticamente o cookie de sessão que autoriza o usuário, autorizando efetivamente o invasor como se fosse o usuário.SameSite
como Strict
nos cookies de sessão. Isso restringe o navegador a anexar cookies apenas a solicitações de navegação de nível superior ou originadas do mesmo site. Solicitações originadas de sites de terceiros por meio de links em várias tags, como iframe
, img
e form
, não têm esses cookies e, portanto, evitam que o site execute ações que o usuário possa não ter autorizado.SameSite
como Lax
para cookies de sessão.
app.get('/', function (req, res) {
...
res.cookie('name', 'Foo', { sameSite: "Lax" });
...
}
SameSite
em cookies de sessão não é definido como Strict
.SameSite
protege cookies contra ataques como CSRF (Cross-Site Request Forgery). Os cookies de sessão representam um usuário para o site para que ele possa executar ações autorizadas. No entanto, o navegador envia automaticamente os cookies com a solicitação e, portanto, os usuários e os sites confiam implicitamente no navegador para autorização. Um invasor pode usar indevidamente essa confiança e fazer uma solicitação ao site em nome do usuário incorporando links no atributo href
e src
de tags como link
e iframe
em páginas de sites de terceiros que um invasor controla. Se um invasor conseguir atrair um usuário desavisado para o site de terceiros que ele controla, ele poderá fazer solicitações que incluam automaticamente o cookie de sessão que autoriza o usuário, autorizando efetivamente o invasor como se fosse o usuário.Strict
para SameSite
, o que restringe o navegador a anexar cookies apenas a solicitações de navegação de nível superior ou originadas do mesmo site. Solicitações originadas de sites de terceiros por meio de links em várias tags, como iframe
, img
e form
, não têm esses cookies e, portanto, evitam que o site execute ações que o usuário possa não ter autorizado.Lax
no atributo SameSite
para cookies de sessão.
ini_set("session.cookie_samesite", "Lax");
SameSite
em cookies de sessão não está definido como Strict
.SameSite
protege cookies contra ataques como CSRF (Cross-Site Request Forgery). Os cookies de sessão representam um usuário para o site para que ele possa executar ações autorizadas. No entanto, o navegador envia automaticamente os cookies com a solicitação e, portanto, os usuários e os sites confiam implicitamente no navegador para autorização. Um invasor pode usar indevidamente essa confiança e fazer uma solicitação ao site em nome do usuário incorporando links no atributo href
e src
de tags como link
e iframe
em páginas de sites de terceiros que um invasor controla. Se um invasor atrair um usuário desavisado para o site de terceiros que ele controla, o invasor poderá fazer solicitações que incluam automaticamente o cookie de sessão com autorização do usuário. Isso efetivamente dá ao invasor acesso com a autorização do usuário.Strict
para o parâmetro SameSite
, o que restringe o navegador a anexar cookies apenas a solicitações de navegação de nível superior ou originadas do mesmo site. Solicitações originadas de sites de terceiros por meio de links em várias tags, como iframe
, img
e form
, não têm esses cookies e, portanto, evitam que o site execute ações que o usuário possa não ter autorizado.Lax
no atributo samesite
para cookies de sessão.
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
definido como true
.Secure
para cada cookie. Se esse sinalizador estiver definido, o navegador apenas enviará o cookie via HTTPS. O envio de cookies através de um canal criptografado pode expô-los a ataques de sniffing de rede e, portanto, o sinalizador "secure" ajuda a manter o valor de um cookie confidencial. Isso é especialmente importante quando o cookie contém dados privados ou carrega um identificador de sessão.Secure
.
...
<configuration>
<system.web>
<authentication mode="Forms">
<forms requireSSL="false" loginUrl="login.aspx">
</forms>
</authentication>
</system.web>
</configuration>
...
Secure
, os cookies enviados durante uma solicitação HTTPS também serão enviados durante as solicitações HTTP subsequentes. O sniffing do tráfego de rede por meio de conexões sem fio não criptografadas é uma tarefa simples para os invasores e, portanto, o envio de cookies (especialmente aqueles com IDs de sessão) via HTTP pode comprometer o aplicativo.Secure
para cada cookie. Se esse sinalizador estiver definido, o navegador apenas enviará o cookie via HTTPS. O envio de cookies através de um canal criptografado pode expô-los a ataques de sniffing de rede e, portanto, o sinalizador "secure" ajuda a manter o valor de um cookie confidencial. Isso é especialmente importante quando o cookie contém dados privados ou carrega um identificador de sessão.Secure
para cookies de sessão.
server.servlet.session.cookie.secure=false
Secure
, os cookies enviados durante uma solicitação HTTPS também serão enviados durante as solicitações HTTP subsequentes. Dessa forma, os invasores poderão comprometer o cookie farejando o tráfego de rede não criptografado, o que é particularmente fácil em redes sem fio.Secure
como true
Secure
para cada cookie. Se esse sinalizador estiver definido, o navegador apenas enviará o cookie via HTTPS. O envio de cookies através de um canal criptografado pode expô-los a ataques de sniffing de rede e, portanto, o sinalizador "secure" ajuda a manter o valor de um cookie confidencial. Isso é especialmente importante quando o cookie contém dados privados ou carrega um identificador de sessão.Secure
.
...
setcookie("emailCookie", $email, 0, "/", "www.example.com");
...
Secure
, os cookies enviados durante uma solicitação HTTPS também serão enviados durante as solicitações HTTP subsequentes. Dessa forma, os invasores poderão comprometer o cookie farejando o tráfego de rede não criptografado, o que é particularmente fácil em redes sem fio.SESSION_COOKIE_SECURE
como True
ou a define como False
.Secure
para cada cookie. Se esse sinalizador estiver definido, o navegador apenas enviará o cookie via HTTPS. O envio de cookies através de um canal criptografado pode expô-los a ataques de sniffing de rede e, portanto, o sinalizador "secure" ajuda a manter o valor de um cookie confidencial. Isso é especialmente importante se o cookie contém dados privados, identificadores de sessão, ou carrega um token CSRF.Secure
para os cookies de sessão.
...
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
, os cookies enviados durante uma solicitação HTTPS também serão enviados durante as solicitações HTTP subsequentes. Dessa forma, os invasores poderão comprometer o cookie farejando o tráfego de rede não criptografado, o que é particularmente fácil em redes sem fio.
<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
poderá ler o valor de Username
e Password
. Qualquer funcionário desonesto com acesso a essas informações poderá usá-las para invadir o sistema.
...
<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
conectado.X-Frame-Options
.X-Frame-Options
.localStorage
e sessionStorage
pode expor informações confidenciais involuntariamente.localStorage
e sessionStorage
para permitir aos desenvolvedores manterem os valores do programa. O mapa sessionStorage
fornece armazenamento à página de chamada e permanece apenas pela duração da instância de página e da sessão imediata do navegador. O mapa localStorage
, no entanto, fornece um armazenamento acessível por meio de várias instâncias de página e várias instâncias de navegador. Essa funcionalidade permite a um aplicativo persistir e utilizar a mesma informação em várias guias ou janelas do navegador.sessionStorage
para o localStorage
ou vice-versa.sessionStorage
. No entanto, o desenvolvedor também armazena as informações no objeto 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
, as informações CCV estarão agora disponível em outras guias do navegador e também em novas invocações do browser. Isso ignorará a lógica do aplicativo para o fluxo de trabalho pretendido.
...
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
e um método de ação de página pageAction()
. O método pageAction()
é executado quando o URL da página é visitado e o servidor não verifica se há tokens anti-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
acessar a página mal-intencionada enquanto tiver uma sessão ativa no site, criará involuntariamente uma conta para o invasor. Isso é um ataque de CSRF. Ele é possível porque o aplicativo não tem como determinar a procedência da solicitação. Qualquer solicitação pode ser uma ação legítima escolhida pelo usuário ou uma ação falsa criada por um invasor. O invasor não chega a ver a página da Web gerada pela solicitação falsa e, portanto, a técnica de ataque é útil somente para solicitações que alteram o estado do aplicativo.
<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
visitar a página maliciosa enquanto tiver uma sessão ativa no site, ela involuntariamente criará uma conta para o invasor. Isto é um ataque de CSRF. Ele é possível porque o aplicativo não tem como determinar a procedência da solicitação. Qualquer solicitação pode ser uma ação legítima escolhida pelo usuário ou uma ação falsa criada por um invasor. O invasor não chega a ver a página da Web gerada pela solicitação falsa e, portanto, a técnica de ataque é útil somente para solicitações que alteram o estado do aplicativo.
<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
visitar a página maliciosa enquanto tiver uma sessão ativa no site, ela involuntariamente criará uma conta para o invasor. Isto é um ataque de CSRF. Ele é possível porque o aplicativo não tem como determinar a procedência da solicitação. Qualquer solicitação pode ser uma ação legítima escolhida pelo usuário ou uma ação falsa criada por um invasor. O invasor não chega a ver a página da Web gerada pela solicitação falsa e, portanto, a técnica de ataque é útil somente para solicitações que alteram o estado do aplicativo.buyItem
.
+ nocsrf
POST /buyItem controllers.ShopController.buyItem
shop.com
, ela comprará itens involuntariamente para o invasor. Isso é um ataque de CSRF. Ele é possível porque o aplicativo não tem como determinar a procedência da solicitação. Qualquer solicitação pode ser uma ação legítima escolhida pelo usuário ou uma ação falsa criada por um invasor. O invasor não chega a ver a página da Web gerada pela solicitação falsa e, portanto, a técnica de ataque é útil somente para solicitações que alteram o estado do aplicativo.
<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
visitar a página maliciosa enquanto tiver uma sessão ativa no site, ela involuntariamente criará uma conta para o invasor. Isto é um ataque de CSRF. Ele é possível porque o aplicativo não tem como determinar a procedência da solicitação. Qualquer solicitação pode ser uma ação legítima escolhida pelo usuário ou uma ação falsa criada por um invasor. O invasor não chega a ver a página da Web gerada pela solicitação falsa e, portanto, a técnica de ataque é útil somente para solicitações que alteram o estado do aplicativo.
@GetMapping("/ai")
String generation(String userInput) {
return this.chatClient.prompt()
.user(userInput)
.call()
.content();
}
message
, e a exibe ao usuário.
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
, e a exibe ao usuário.
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
. Portanto, o XSS só será possível se a resposta usar esse tipo MIME ou qualquer outro que também force o navegador a renderizar a resposta como HTML ou outro documento que possa executar scripts, como imagens SVG. (image/svg+xml
), documentos XML (application/xml
), etc. application/octet-stream
. No entanto, alguns navegadores, como o Internet Explorer, executam o que é conhecido como Content Sniffing
. O Content Sniffing envolve ignorar o tipo MIME fornecido e tentar inferir o tipo MIME correto pelo conteúdo da resposta.text/html
é apenas um tipo MIME que pode levar a vulnerabilidades de XSS. Outros documentos que podem executar scripts, como imagens SVG (image/svg+xml
), documentos XML (application/xml
), assim como outros, podem levar a vulnerabilidades de XSS, independentemente de o navegador executar o Content Sniffing. <html><body><script>alert(1)</script></body></html>
, poderia ser renderizada como HTML mesmo se seu cabeçalho content-type
estivesse definido como application/octet-stream
,multipart-mixed
, e assim por diante.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
definido como <html><body><script>alert(1)</script></body></html>
, o servidor produzirá a seguinte resposta:
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
. Portanto, o XSS só será possível se a resposta usar esse tipo MIME ou qualquer outro que também force o navegador a renderizar a resposta como HTML ou outro documento que possa executar scripts, como imagens SVG. (image/svg+xml
), documentos XML (application/xml
), etc. application/json
. No entanto, alguns navegadores, como o Internet Explorer, executam o que é conhecido como Content Sniffing
. O Content Sniffing envolve ignorar o tipo MIME fornecido e tentar inferir o tipo MIME correto pelo conteúdo da resposta.Vale a pena notar, no entanto, que um tipo MIME de text/html
é apenas um tipo MIME que pode levar a vulnerabilidades de XSS. Outros documentos que podem executar scripts, como imagens SVG (image/svg+xml
), documentos XML (application/xml
), assim como outros, podem levar a vulnerabilidades de XSS, independentemente de o navegador executar o Content Sniffing. <html><body><script>alert(1)</script></body></html>
, poderia ser renderizada como HTML, mesmo se o cabeçalho content-type
estiver definido como 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
definido como <html><body><script>alert(1)</script></body></html>
, o servidor produzirá a seguinte resposta:
HTTP/1.1 200 OK
Content-Length: 88
Content-Type: application/json
Connection: Closed
{'name': '<html><body><script>alert(1)</script></body></html>'}