SameSite
en las cookies de sesión.SameSite
limita el alcance de la cookie de modo que solo se adjunta a una solicitud si la solicitud se genera a partir de un contexto propio o del mismo sitio. Esto ayuda a proteger las cookies contra ataques de Cross-site Request Forgery (CSRF, por sus siglas en inglés). El parámetro SameSite
puede tener los siguientes tres valores:Strict
, las cookies solo se envían junto con las solicitudes en la navegación de nivel superior.Lax
, las cookies se envían con navegación de nivel superior desde el mismo host, así como las solicitudes GET originadas en el host desde sitios de terceros. Por ejemplo, suponga que un sitio de terceros tiene etiquetas iframe
o href
para el sitio host. Si un usuario sigue el enlace, la solicitud incluirá la cookie.SameSite
en None
en las cookies de sesión.
...
Cookie cookie = new Cookie('name', 'Foo', path, -1, true, 'None');
...
SameSite
en las cookies de sesión.SameSite
limita el alcance de la cookie de modo que solo se adjuntará a una solicitud si la solicitud se genera a partir de un contexto propio o del mismo sitio. Esto ayuda a proteger las cookies contra ataques de Cross-site Request Forgery (CSRF, por sus siglas en inglés). El atributo SameSite
puede tener los siguientes tres valores:Strict
, las cookies solo se envían junto con las solicitudes en la navegación de nivel superior.Lax
, las cookies se envían con la navegación de nivel superior desde el mismo host, así como las solicitudes GET que se originan en sitios de terceros, incluidos aquellos que tienen etiquetas iframe
o href
que se vinculan al sitio del host. Si un usuario sigue el enlace, la solicitud incluirá la cookie.SameSite
en las cookies de sesión.
...
CookieOptions opt = new CookieOptions()
{
SameSite = SameSiteMode.None;
};
context.Response.Cookies.Append("name", "Foo", opt);
...
SameSite
en las cookies de sesión.SameSite
limita el alcance de la cookie de modo que solo se adjunta a una solicitud si la solicitud se genera a partir de un contexto propio o del mismo sitio. Esto ayuda a proteger las cookies contra ataques de falsificación de petición en Cross-Site Request Forgery (CSRF). El atributo SameSite
puede tener los siguientes tres valores:Strict
, las cookies solo se envían junto con las solicitudes en la navegación de nivel superior.Lax
, las cookies se envían con navegación de nivel superior desde el mismo host, así como las solicitudes GET originadas en el host desde sitios de terceros. Por ejemplo, suponga un sitio de terceros tiene etiquetas iframe
o href
para el sitio host. Si un usuario sigue el enlace, la solicitud incluirá la cookie.SameSite
en las cookies de sesión.
c := &http.Cookie{
Name: "cookie",
Value: "samesite-none",
SameSite: http.SameSiteNoneMode,
}
SameSite
en las cookies de sesión.SameSite
limita el alcance de la cookie de modo que solo se adjunta a una solicitud si la solicitud se genera a partir de un contexto propio o del mismo sitio. Esto ayuda a proteger las cookies contra ataques de Cross-site Request Forgery (CSRF, por sus siglas en inglés). El atributo SameSite
puede tener los siguientes tres valores:Strict
, las cookies solo se envían junto con las solicitudes en la navegación de nivel superior.Lax
, las cookies se envían con la navegación de nivel superior desde el mismo host, así como las solicitudes GET que se originan en sitios de terceros, incluidos aquellos que tienen etiquetas iframe
o href
que se vinculan al sitio del host. Por ejemplo, suponga que un sitio de terceros tiene etiquetas iframe
o href
para vincularse con el sitio host. Si un usuario sigue el enlace, la solicitud incluirá la cookie.SameSite
en las cookies de sesión.
ResponseCookie cookie = ResponseCookie.from("myCookie", "myCookieValue")
...
.sameSite("None")
...
SameSite
en las cookies de sesión.SameSite
limita el alcance de la cookie de modo que solo se adjunta a una solicitud si la solicitud se genera a partir de un contexto propio o del mismo sitio. Esto ayuda a proteger las cookies contra ataques de Cross-site Request Forgery (CSRF, por sus siglas en inglés). El atributo SameSite
puede tener los siguientes tres valores:Strict
, las cookies solo se envían junto con las solicitudes en la navegación de nivel superior.Lax
, las cookies se envían con la navegación de nivel superior desde el mismo host, así como las solicitudes GET que se originan en sitios de terceros, incluidos aquellos que tienen etiquetas iframe
o href
que se vinculan al sitio del host. Por ejemplo, suponga que un sitio de terceros tiene etiquetas iframe
o href
para vincularse con el sitio host. Si un usuario sigue el enlace, la solicitud incluirá la cookie.SameSite
en las cookies de sesión.
app.get('/', function (req, res) {
...
res.cookie('name', 'Foo', { sameSite: false });
...
}
SameSite
en las cookies de sesión.SameSite
limita el alcance de la cookie de modo que solo se adjuntará a una solicitud si la solicitud se genera a partir de un contexto propio o del mismo sitio. Esto ayuda a proteger las cookies contra ataques de falsificación de petición en sitios cruzados (CSRF, por sus siglas en inglés). El atributo SameSite
puede tener los siguientes tres valores:Strict
, las cookies solo se envían junto con las solicitudes en la navegación de nivel superior.Lax
, las cookies se envían con navegación de nivel superior desde el mismo host, así como las solicitudes GET originadas en el host desde sitios de terceros. Por ejemplo, suponga un sitio de terceros tiene etiquetas iframe
o href
para el sitio host. Si un usuario sigue el enlace, la solicitud incluirá la cookie.SameSite
en las cookies de sesión.
ini_set("session.cookie_samesite", "None");
SameSite
en las cookies de sesión.samesite
limita el alcance de la cookie de modo que solo se adjunta a una solicitud si la solicitud se genera a partir de un contexto propio o del mismo sitio. Esto ayuda a proteger las cookies contra ataques de Cross-site Request Forgery (CSRF, por sus siglas en inglés). El parámetro samesite
puede tener los siguientes tres valores:Strict
, las cookies solo se envían junto con las solicitudes en la navegación de nivel superior.Lax
, las cookies se envían con navegación de nivel superior desde el mismo host, así como las solicitudes GET originadas en el host desde sitios de terceros. Por ejemplo, suponga un sitio de terceros tiene etiquetas iframe
o href
para el sitio host. Si un usuario sigue el enlace, la solicitud incluirá la cookie.SameSite
en las cookies de sesión.
response.set_cookie("cookie", value="samesite-none", samesite=None)
.example.com
". Esto expone la cookie a todas las aplicaciones web del dominio básico y los subdominios. Puesto que es frecuente que las cookies porten información confidencial como identificadores de sesión, compartir las cookies entre aplicaciones puede provocar que una vulnerabilidad de una aplicación comprometa a otra.http://secure.example.com/
y que la aplicación define una cookie de ID de sesión con un dominio ".example.com
" cuando los usuarios inician sesión.
HttpCookie cookie = new HttpCookie("sessionID", sessionID);
cookie.Domain = ".example.com";
http://insecure.example.com/
que contiene una vulnerabilidad Cross-Site Scripting. Cualquier usuario autenticado en http://secure.example.com
que acceda a http://insecure.example.com
corre el riesgo de exponer su cookie de sesión de http://secure.example.com
.insecure.example.com
para crear su propia cookie demasiado grande que sustituya a la cookie de secure.example.com
..example.com
". Esto expone la cookie a todas las aplicaciones web del dominio básico y los subdominios. Puesto que es frecuente que las cookies porten información confidencial como identificadores de sesión, compartir las cookies entre aplicaciones puede provocar que una vulnerabilidad de una aplicación comprometa a otra.http://secure.example.com/
y que la aplicación define una cookie de ID de sesión con un dominio ".example.com
" cuando los usuarios inician sesión.
cookie := http.Cookie{
Name: "sessionID",
Value: getSessionID(),
Domain: ".example.com",
}
...
http://insecure.example.com/
que contiene una vulnerabilidad Cross-Site Scripting. Cualquier usuario autenticado en http://secure.example.com
que acceda a http://insecure.example.com
corre el riesgo de exponer su cookie de sesión de http://secure.example.com
.insecure.example.com
para crear su propia cookie demasiado grande que sustituya a la cookie de Secure.example.com
..example.com
". Esto expone la cookie a todas las aplicaciones web del dominio básico y los subdominios. Puesto que es frecuente que las cookies porten información confidencial como identificadores de sesión, compartir las cookies entre aplicaciones puede provocar que una vulnerabilidad de una aplicación comprometa a otra.http://secure.example.com/
y que la aplicación define una cookie de ID de sesión con un dominio ".example.com
" cuando los usuarios inician sesión.
Cookie cookie = new Cookie("sessionID", sessionID);
cookie.setDomain(".example.com");
http://insecure.example.com/
y que contiene una vulnerabilidad de Cross-Site Scripting. Cualquier usuario autenticado en http://secure.example.com
que acceda a http://insecure.example.com
crea un riesgo al exponer su cookie de sesión de http://secure.example.com
.insecure.example.com
para crear su propia cookie demasiado grande que sustituya a la cookie de secure.example.com
..example.com
". Esto expone la cookie a todas las aplicaciones web del dominio básico y los subdominios. Puesto que es frecuente que las cookies porten información confidencial como identificadores de sesión, compartir las cookies entre aplicaciones puede provocar que una vulnerabilidad de una aplicación comprometa a otra.http://secure.example.com/
y que la aplicación define una cookie de ID de sesión con un dominio ".example.com
" cuando los usuarios inician sesión.
cookie_options = {};
cookie_options.domain = '.example.com';
...
res.cookie('important_cookie', info, cookie_options);
http://insecure.example.com/
y que contiene una vulnerabilidad de Cross-Site Scripting. Cualquier usuario autenticado en http://secure.example.com
que acceda a http://insecure.example.com
crea un riesgo al exponer su cookie de sesión de http://secure.example.com
.insecure.example.com
para crear su propia cookie demasiado grande que sustituya a la cookie de secure.example.com
..example.com
". Esto expone la cookie a todas las aplicaciones web del dominio básico y los subdominios. Puesto que es frecuente que las cookies porten información confidencial como identificadores de sesión, compartir las cookies entre aplicaciones puede provocar que una vulnerabilidad de una aplicación comprometa a otra.http://secure.example.com/
y que la aplicación define una cookie de ID de sesión con un dominio ".example.com
" cuando los usuarios inician sesión.
...
NSDictionary *cookieProperties = [NSDictionary dictionary];
...
[cookieProperties setValue:@".example.com" forKey:NSHTTPCookieDomain];
...
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
...
http://insecure.example.com/
y que contiene una vulnerabilidad de Cross-Site Scripting. Cualquier usuario autenticado en http://secure.example.com
que acceda a http://insecure.example.com
crea un riesgo al exponer su cookie de sesión de http://secure.example.com
.insecure.example.com
para crear su propia cookie demasiado grande que sustituya a la cookie de secure.example.com
..example.com
". Esto expone la cookie a todas las aplicaciones web del dominio básico y los subdominios. Puesto que es frecuente que las cookies porten información confidencial como identificadores de sesión, compartir las cookies entre aplicaciones puede provocar que una vulnerabilidad de una aplicación comprometa a otra.http://secure.example.com/
y que la aplicación define una cookie de ID de sesión con un dominio ".example.com
" cuando los usuarios inician sesión.
setcookie("mySessionId", getSessionID(), 0, "/", ".example.com", true, true);
http://insecure.example.com/
y que contiene una vulnerabilidad de Cross-Site Scripting. Cualquier usuario autenticado en http://secure.example.com
que acceda a http://insecure.example.com
crea un riesgo al exponer su cookie de sesión de http://secure.example.com
.insecure.example.com
para crear su propia cookie demasiado grande que sustituya a la cookie de secure.example.com
..example.com
". Esto expone la cookie a todas las aplicaciones web del dominio básico y los subdominios. Puesto que es frecuente que las cookies porten información confidencial como identificadores de sesión, compartir las cookies entre aplicaciones puede provocar que una vulnerabilidad de una aplicación comprometa a otra.http://secure.example.com/
y que la aplicación define una cookie de ID de sesión con un dominio ".example.com
" cuando los usuarios inician sesión.
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/
y que contiene una vulnerabilidad de Cross-Site Scripting. Cualquier usuario autenticado en http://secure.example.com
que acceda a http://insecure.example.com
crea un riesgo al exponer su cookie de sesión de http://secure.example.com
.insecure.example.com
para crear su propia cookie demasiado grande que sustituya a la cookie de secure.example.com
..example.com
". Esto expone la cookie a todas las aplicaciones web del dominio básico y los subdominios. Puesto que es frecuente que las cookies porten información confidencial como identificadores de sesión, compartir las cookies entre aplicaciones puede provocar que una vulnerabilidad de una aplicación comprometa a otra.http://secure.example.com/
y que la aplicación define una cookie de ID de sesión con un dominio ".example.com
" cuando los usuarios inician sesión.
Ok(Html(command)).withCookies(Cookie("sessionID", sessionID, domain = Some(".example.com")))
http://insecure.example.com/
que contiene una vulnerabilidad Cross-Site Scripting. Cualquier usuario autenticado en http://secure.example.com
que acceda a http://insecure.example.com
corre el riesgo de exponer su cookie de sesión de http://secure.example.com
.insecure.example.com
para crear su propia cookie demasiado grande que sustituya a la cookie de secure.example.com
..example.com
". Esto expone la cookie a todas las aplicaciones web del dominio básico y los subdominios. Puesto que es frecuente que las cookies porten información confidencial como identificadores de sesión, compartir las cookies entre aplicaciones puede provocar que una vulnerabilidad de una aplicación comprometa a otra.http://secure.example.com/
y que la aplicación define una cookie de ID de sesión con un dominio ".example.com
" cuando los usuarios inician sesión.
...
let properties = [
NSHTTPCookieDomain: ".example.com",
NSHTTPCookiePath: "/service",
NSHTTPCookieName: "foo",
NSHTTPCookieValue: "bar",
NSHTTPCookieSecure: true
]
let cookie : NSHTTPCookie? = NSHTTPCookie(properties:properties)
...
http://insecure.example.com/
y que contiene una vulnerabilidad de Cross-Site Scripting. Cualquier usuario autenticado en http://secure.example.com
que acceda a http://insecure.example.com
crea un riesgo al exponer su cookie de sesión de http://secure.example.com
.insecure.example.com
para crear su propia cookie demasiado grande que sustituya a la cookie de secure.example.com
./
"). Al hacerlo, se expone la cookie a todas las aplicaciones web del dominio. Puesto que es frecuente que las cookies porten información confidencial como identificadores de sesión, compartir las cookies entre aplicaciones puede provocar que una vulnerabilidad de una aplicación comprometa a otra.http://communitypages.example.com/MyForum
y que la aplicación define una cookie de ID de sesión con una ruta "/
" cuando los usuarios inician sesión en un foro. Por ejemplo:
...
String path = '/';
Cookie cookie = new Cookie('sessionID', sessionID, path, maxAge, true, 'Strict');
...
http://communitypages.example.com/EvilSite
y publica un vínculo a este sitio en el foro. Cuando un usuario del foro hace clic en este vínculo, el explorador envía la cookie configurada mediante /MyForum
a la aplicación que se ejecuta en /EvilSite
. Al robar el identificador de sesión, el atacante puede comprometer la cuenta de cualquier usuario del foro que haya navegado a /EvilSite
./EvilSite
para crear su propia cookie demasiado grande que sustituya a la cookie de /MyForum
./
"; no obstante, de esta forma se expone la cookie a todas las aplicaciones web del mismo dominio. Puesto que es frecuente que las cookies porten información confidencial como identificadores de sesión, compartir las cookies entre aplicaciones puede provocar que una vulnerabilidad de una aplicación comprometa a otra.http://communitypages.example.com/MyForum
y que la aplicación define una cookie de ID de sesión con una ruta "/
" cuando los usuarios inician sesión en un foro.
HttpCookie cookie = new HttpCookie("sessionID", sessionID);
cookie.Path = "/";
http://communitypages.example.com/EvilSite
y publica un vínculo a este sitio en el foro. Cuando un usuario del foro hace clic en este vínculo, el explorador envía la cookie configurada mediante /MyForum
a la aplicación que se ejecuta en /EvilSite
. Si se apodera del ID de sesión, el usuario malintencionado puede comprometer la cuenta de cualquier usuario del foro que haya navegado a /EvilSite
./EvilSite
para crear su propia cookie demasiado grande que sustituya a la cookie de /MyForum
./
"). Al hacerlo, se expone la cookie a todas las aplicaciones web del dominio. Puesto que es frecuente que las cookies porten información confidencial como identificadores de sesión, compartir las cookies entre aplicaciones puede provocar que una vulnerabilidad de una aplicación comprometa a otra.http://communitypages.example.com/MyForum
y que la aplicación define una cookie de ID de sesión con una ruta "/
" cuando los usuarios inician sesión.
cookie := http.Cookie{
Name: "sessionID",
Value: sID,
Expires: time.Now().AddDate(0, 0, 1),
Path: "/",
}
...
http://communitypages.example.com/EvilSite
y publica un vínculo a este sitio en el foro. Cuando un usuario del foro hace clic en este vínculo, el explorador envía la cookie configurada mediante /MyForum
a la aplicación que se ejecuta en /EvilSite
. Al robar el identificador de sesión, el atacante puede comprometer la cuenta de cualquier usuario del foro que haya navegado a /EvilSite
./EvilSite
para crear su propia cookie demasiado grande que sustituya a la cookie de /MyForum
./
"). Al hacerlo, se expone la cookie a todas las aplicaciones web del dominio. Puesto que es frecuente que las cookies porten información confidencial como identificadores de sesión, compartir las cookies entre aplicaciones puede provocar que una vulnerabilidad de una aplicación comprometa a otra.http://communitypages.example.com/MyForum
y que la aplicación define una cookie de ID de sesión con una ruta "/
" cuando los usuarios inician sesión en un foro.
Cookie cookie = new Cookie("sessionID", sessionID);
cookie.setPath("/");
http://communitypages.example.com/EvilSite
y publica un vínculo a este sitio en el foro. Cuando un usuario del foro hace clic en este vínculo, el explorador envía la cookie configurada mediante /MyForum
a la aplicación que se ejecuta en /EvilSite
. Si se apodera del ID de sesión, el usuario malintencionado puede comprometer la cuenta de cualquier usuario del foro que haya navegado a /EvilSite
./EvilSite
para crear su propia cookie demasiado grande que sustituya a la cookie de /MyForum
./
"). Al hacerlo, se expone la cookie a todas las aplicaciones web del dominio. Puesto que es frecuente que las cookies porten información confidencial como identificadores de sesión, compartir las cookies entre aplicaciones puede provocar que una vulnerabilidad de una aplicación comprometa a otra.http://communitypages.example.com/MyForum
y que la aplicación define una cookie de ID de sesión con una ruta "/
" cuando los usuarios inician sesión en un foro.
cookie_options = {};
cookie_options.path = '/';
...
res.cookie('important_cookie', info, cookie_options);
http://communitypages.example.com/EvilSite
y publica un vínculo a este sitio en el foro. Cuando un usuario del foro hace clic en este vínculo, el explorador envía la cookie configurada mediante /MyForum
a la aplicación que se ejecuta en /EvilSite
. Si se apodera del ID de sesión, el usuario malintencionado puede comprometer la cuenta de cualquier usuario del foro que haya navegado a /EvilSite
./EvilSite
para crear su propia cookie demasiado grande que sustituya a la cookie de /MyForum
./
"). Al hacerlo, se expone la cookie a todas las aplicaciones web del dominio. Puesto que es frecuente que las cookies porten información confidencial como identificadores de sesión, compartir las cookies entre aplicaciones puede provocar que una vulnerabilidad de una aplicación comprometa a otra.http://communitypages.example.com/MyForum
y que la aplicación define una cookie de ID de sesión con una ruta "/
" cuando los usuarios inician sesión en un foro.
...
NSDictionary *cookieProperties = [NSDictionary dictionary];
...
[cookieProperties setValue:@"/" forKey:NSHTTPCookiePath];
...
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
...
http://communitypages.example.com/EvilSite
y publica un vínculo a este sitio en el foro. Cuando un usuario del foro hace clic en este vínculo, el explorador envía la cookie configurada mediante /MyForum
a la aplicación que se ejecuta en /EvilSite
. Si se apodera del ID de sesión, el usuario malintencionado puede comprometer la cuenta de cualquier usuario del foro que haya navegado a /EvilSite
./EvilSite
para crear su propia cookie demasiado grande que sustituya a la cookie de /MyForum
./
"). Al hacerlo, se expone la cookie a todas las aplicaciones web del dominio. Puesto que es frecuente que las cookies porten información confidencial como identificadores de sesión, compartir las cookies entre aplicaciones puede provocar que una vulnerabilidad de una aplicación comprometa a otra.http://communitypages.example.com/MyForum
y que la aplicación define una cookie de ID de sesión con una ruta "/
" cuando los usuarios inician sesión en un foro.
setcookie("mySessionId", getSessionID(), 0, "/", "communitypages.example.com", true, true);
http://communitypages.example.com/EvilSite
y publica un vínculo a este sitio en el foro. Cuando un usuario del foro hace clic en este vínculo, el explorador envía la cookie configurada mediante /MyForum
a la aplicación que se ejecuta en /EvilSite
. Si se apodera del ID de sesión, el usuario malintencionado puede comprometer la cuenta de cualquier usuario del foro que haya navegado a /EvilSite
./EvilSite
para crear su propia cookie demasiado grande que sustituya a la cookie de /MyForum
./
"). Al hacerlo, se expone la cookie a todas las aplicaciones web del dominio. Puesto que es frecuente que las cookies porten información confidencial como identificadores de sesión, compartir las cookies entre aplicaciones puede provocar que una vulnerabilidad de una aplicación comprometa a otra.http://communitypages.example.com/MyForum
y que la aplicación define una cookie de ID de sesión con una ruta "/
" cuando los usuarios inician sesión en un foro.
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
y publica un vínculo a este sitio en el foro. Cuando un usuario del foro hace clic en este vínculo, el explorador envía la cookie configurada mediante /MyForum
a la aplicación que se ejecuta en /EvilSite
. Si se apodera del ID de sesión, el usuario malintencionado puede comprometer la cuenta de cualquier usuario del foro que haya navegado a /EvilSite
./EvilSite
para crear su propia cookie demasiado grande que sustituya a la cookie de /MyForum
./
"). Al hacerlo, se expone la cookie a todas las aplicaciones web del dominio. Puesto que es frecuente que las cookies porten información confidencial como identificadores de sesión, compartir las cookies entre aplicaciones puede provocar que una vulnerabilidad de una aplicación comprometa a otra.http://communitypages.example.com/MyForum
y que la aplicación define una cookie de ID de sesión con una ruta "/
" cuando los usuarios inician sesión en un foro.
Ok(Html(command)).withCookies(Cookie("sessionID", sessionID, path = "/"))
http://communitypages.example.com/EvilSite
y publica un vínculo a este sitio en el foro. Cuando un usuario del foro hace clic en este vínculo, el explorador envía la cookie configurada mediante /MyForum
a la aplicación que se ejecuta en /EvilSite
. Si se apodera del ID de sesión, el usuario malintencionado puede comprometer la cuenta de cualquier usuario del foro que haya navegado a /EvilSite
./EvilSite
para crear su propia cookie demasiado grande que sustituya a la cookie de /MyForum
./
"). Al hacerlo, se expone la cookie a todas las aplicaciones web del dominio. Puesto que es frecuente que las cookies porten información confidencial como identificadores de sesión, compartir las cookies entre aplicaciones puede provocar que una vulnerabilidad de una aplicación comprometa a otra.http://communitypages.example.com/MyForum
y que la aplicación define una cookie de ID de sesión con una ruta "/
" cuando los usuarios inician sesión en un foro.
...
let properties = [
NSHTTPCookieDomain: "www.example.com",
NSHTTPCookiePath: "/",
NSHTTPCookieName: "foo",
NSHTTPCookieValue: "bar",
NSHTTPCookieSecure: true
]
let cookie : NSHTTPCookie? = NSHTTPCookie(properties:properties)
...
http://communitypages.example.com/EvilSite
y publica un vínculo a este sitio en el foro. Cuando un usuario del foro hace clic en este vínculo, el explorador envía la cookie configurada mediante /MyForum
a la aplicación que se ejecuta en /EvilSite
. Si se apodera del ID de sesión, el usuario malintencionado puede comprometer la cuenta de cualquier usuario del foro que haya navegado a /EvilSite
./EvilSite
para crear su propia cookie demasiado grande que sustituya a la cookie de /MyForum
..example.com
". No obstante, hacer esto expone la cookie de sesión a todas las aplicaciones web del nombre del dominio básico y a todos los subdominios. La pérdida de cookies de sesión puede poner en peligro una cuenta.http://secure.example.com/
y que la aplicación define una cookie de sesión con un dominio ".example.com
" cuando los usuarios inician sesión.
server.servlet.session.cookie.domain=.example.com
http://insecure.example.com/
que contiene una vulnerabilidad Cross-Site Scripting. Cualquier usuario autenticado en http://secure.example.com
que acceda a http://insecure.example.com
corre el riesgo de exponer su cookie de sesión de http://secure.example.com
..example.com
". De este modo la cookie de sesión queda expuesta a todas las aplicaciones web en el dominio base y en cualquiera de los subdominios. Compartir las cookies de sesión entre aplicaciones puede provocar que una vulnerabilidad de una aplicación comprometa a otra.http://secure.example.com/
y que la aplicación define una cookie de sesión con un dominio ".example.com
" cuando los usuarios inician sesión.
session_set_cookie_params(0, "/", ".example.com", true, true);
http://insecure.example.com/
y que contiene una vulnerabilidad de Cross-Site Scripting. Cualquier usuario autenticado en http://secure.example.com
que acceda a http://insecure.example.com
crea un riesgo al exponer su cookie de sesión de http://secure.example.com
./
"). Esto expone la cookie a todas las aplicaciones web pertenecientes al mismo dominio. La pérdida de cookies de sesión puede poner en peligro las cuentas en el sentido de que un atacante puede robar una cookie de sesión utilizando una vulnerabilidad de cualquiera de las aplicaciones del dominio.http://communitypages.example.com/MyForum
y que la aplicación define una cookie de sesión con una ruta "/
" cuando los usuarios inician sesión. Por ejemplo:
server.servlet.session.cookie.path=/
http://communitypages.example.com/EvilSite
y publica un vínculo a este sitio en el foro. Cuando un usuario del foro hace clic en este vínculo, el explorador enviará la cookie de sesión configurada mediante /MyForum
a la aplicación que se ejecuta en /EvilSite
. Al utilizar la cookie de sesión proporcionada por el usuario en /MyForum
, el atacante puede comprometer la cuenta de cualquier usuario del foro que haya navegado a /EvilSite
./
"). Esto expone la cookie a todas las aplicaciones web pertenecientes al mismo dominio. La pérdida de cookies de sesión puede poner en peligro las cuentas en el sentido de que un atacante puede robar una cookie de sesión utilizando una vulnerabilidad de cualquiera de las aplicaciones del dominio.http://communitypages.example.com/MyForum
y que la aplicación define una cookie de sesión con una ruta "/
" cuando los usuarios inician sesión.
session_set_cookie_params(0, "/", "communitypages.example.com", true, true);
http://communitypages.example.com/EvilSite
y publica un vínculo a este sitio en el foro. Cuando un usuario del foro hace clic en este vínculo, el explorador enviará la cookie de sesión configurada mediante /MyForum
a la aplicación que se ejecuta en /EvilSite
. Al robar la cookie de sesión, el atacante puede comprometer la cuenta de cualquier usuario del foro que se haya dirigido a /EvilSite
.SameSite
en las cookies de sesión no está configurado en Strict
.SameSite
limita el alcance de la cookie de modo que solo se adjunta a una solicitud si la solicitud se genera a partir de un contexto propio o del mismo sitio. Esto ayuda a proteger las cookies contra ataques de Cross-site Request Forgery (CSRF, por sus siglas en inglés). El parámetro SameSite
puede tener los siguientes tres valores:Strict
, las cookies solo se envían junto con las solicitudes en la navegación de nivel superior.Lax
, las cookies se envían con navegación de nivel superior desde el mismo host, así como las solicitudes GET originadas en el host desde sitios de terceros. Por ejemplo, suponga que un sitio de terceros tiene etiquetas iframe
o href
para el sitio host. Si un usuario sigue el enlace, la solicitud incluirá la cookie.SameSite
en Lax
en las cookies de sesión.
...
Cookie cookie = new Cookie('name', 'Foo', path, -1, true, 'Lax');
...
SameSite
en las cookies de sesión no está establecido en Strict
.SameSite
protege las cookies de ataques como Cross-site Request Forgery (CSRF). Las cookies de sesión representan a un usuario en el sitio para que el usuario pueda realizar acciones autorizadas. Sin embargo, el navegador envía automáticamente las cookies con la solicitud y, por lo tanto, los usuarios y los sitios web confían implícitamente en el navegador para la autorización. Un atacante puede hacer un uso indebido de esta confianza y realizar una solicitud al sitio en nombre del usuario incrustando enlaces dentro del atributo href
y src
de las etiquetas, como el link
y iframe
, en páginas de sitios de terceros que controle un atacante. Si un atacante puede atraer a un usuario desprevenido al sitio de terceros que controla, el atacante puede realizar solicitudes que incluyen automáticamente la cookie de sesión que autoriza al usuario, autorizando efectivamente al atacante como si fuera el usuario.SameSite
en Strict
en las cookies de sesión. Esto restringe el navegador para agregar cookies solo a las solicitudes que son de navegación de nivel superior o que se originan en el mismo sitio. Las solicitudes que se originan en sitios de terceros a través de enlaces en varias etiquetas como iframe
, img
y form
no tienen estas cookies y, por lo tanto, impiden que el sitio tome medidas que el usuario podría no haber autorizado.Lax
en el atributo SameSite
de las cookies de sesión.
...
CookieOptions opt = new CookieOptions()
{
SameSite = SameSiteMode.Lax;
};
context.Response.Cookies.Append("name", "Foo", opt);
...
SameSite
en las cookies de sesión no está establecido en SameSiteStrictMode
.SameSite
protege las cookies de ataques como la falsificación de petición en sitios cruzados (CSRF). Las cookies de sesión representan a un usuario en el sitio para que el usuario pueda realizar acciones autorizadas. Sin embargo, el navegador envía automáticamente las cookies con la solicitud y, por lo tanto, los usuarios y los sitios web confían implícitamente en el navegador para la autorización. Un atacante puede hacer un uso indebido de esta confianza y realizar una solicitud al sitio en nombre del usuario incrustando enlaces dentro del atributo href
y src
de las etiquetas, como el link
y iframe
, en páginas de sitios de terceros que controle un atacante. Si un atacante puede atraer a un usuario desprevenido al sitio de terceros que controla, el atacante puede realizar solicitudes que incluyen automáticamente la cookie de sesión que autoriza al usuario, autorizando efectivamente al atacante como si fuera el usuario.SameSiteStrictMode
para el atributo SameSite
, que restringe el navegador para agregar cookies solo a las solicitudes que son de navegación de nivel superior o se originan en el mismo sitio. Las solicitudes que se originan en sitios de terceros a través de enlaces en varias etiquetas como iframe
, img
y form
no tienen estas cookies y, por lo tanto, impiden que el sitio tome medidas que el usuario podría no haber autorizado.SameSiteLaxMode
en el atributo SameSite
en las cookies de sesión.
c := &http.Cookie{
Name: "cookie",
Value: "samesite-lax",
SameSite: http.SameSiteLaxMode,
}
SameSite
en las cookies de sesión no está establecido en Strict
.SameSite
protege las cookies de ataques como Cross-site Request Forgery (CSRF). Las cookies de sesión representan a un usuario en el sitio para que el usuario pueda realizar acciones autorizadas. Sin embargo, el navegador envía automáticamente las cookies con la solicitud y, por lo tanto, los usuarios y los sitios web confían implícitamente en el navegador para la autorización. Un atacante puede hacer un uso indebido de esta confianza y realizar una solicitud al sitio en nombre del usuario incrustando enlaces dentro del atributo href
y src
de las etiquetas, como el link
y iframe
, en páginas de sitios de terceros que controle un atacante. Si un atacante puede atraer a un usuario desprevenido al sitio de terceros que controla, el atacante puede realizar solicitudes que incluyen automáticamente la cookie de sesión que autoriza al usuario, autorizando efectivamente al atacante como si fuera el usuario.SameSite
en Strict
en las cookies de sesión. Esto restringe el navegador para agregar cookies solo a las solicitudes que son de navegación de nivel superior o que se originan en el mismo sitio. Las solicitudes que se originan en sitios de terceros a través de enlaces en varias etiquetas como iframe
, img
y form
no tienen estas cookies y, por lo tanto, impiden que el sitio tome medidas que el usuario podría no haber autorizado.Lax
en el atributo SameSite
de las cookies de sesión.
ResponseCookie cookie = ResponseCookie.from("myCookie", "myCookieValue")
...
.sameSite("Lax")
...
}
SameSite
en las cookies de sesión no está establecido en Strict
.SameSite
protege las cookies de ataques como Cross-site Request Forgery (CSRF). Las cookies de sesión representan a un usuario en el sitio para que el usuario pueda realizar acciones autorizadas. Sin embargo, el navegador envía automáticamente las cookies con la solicitud y, por lo tanto, los usuarios y los sitios web confían implícitamente en el navegador para la autorización. Un atacante puede hacer un uso indebido de esta confianza y realizar una solicitud al sitio en nombre del usuario incrustando enlaces dentro del atributo href
y src
de las etiquetas, como el link
y iframe
, en páginas de sitios de terceros que controle un atacante. Si un atacante puede atraer a un usuario desprevenido al sitio de terceros que controla, el atacante puede realizar solicitudes que incluyen automáticamente la cookie de sesión que autoriza al usuario, autorizando efectivamente al atacante como si fuera el usuario.SameSite
en Strict
en las cookies de sesión. Esto restringe el navegador para agregar cookies solo a las solicitudes que son de navegación de nivel superior o que se originan en el mismo sitio. Las solicitudes que se originan en sitios de terceros a través de enlaces en varias etiquetas como iframe
, img
y form
no tienen estas cookies y, por lo tanto, impiden que el sitio tome medidas que el usuario podría no haber autorizado.Lax
en el atributo SameSite
de las cookies de sesión.
app.get('/', function (req, res) {
...
res.cookie('name', 'Foo', { sameSite: "Lax" });
...
}
SameSite
en las cookies de sesión no está establecido en Strict
.SameSite
protege las cookies de ataques como la falsificación de petición en sitios cruzados (CSRF). Las cookies de sesión representan a un usuario en el sitio para que el usuario pueda realizar acciones autorizadas. Sin embargo, el navegador envía automáticamente las cookies con la solicitud y, por lo tanto, los usuarios y los sitios web confían implícitamente en el navegador para la autorización. Un atacante puede hacer un uso indebido de esta confianza y realizar una solicitud al sitio en nombre del usuario incrustando enlaces dentro del atributo href
y src
de las etiquetas, como el link
y iframe
, en páginas de sitios de terceros que controle un atacante. Si un atacante puede atraer a un usuario desprevenido al sitio de terceros que controla, el atacante puede realizar solicitudes que incluyen automáticamente la cookie de sesión que autoriza al usuario, autorizando efectivamente al atacante como si fuera el usuario.Strict
para el atributo SameSite
, que restringe el navegador para agregar cookies solo a las solicitudes que son de navegación de nivel superior o se originan en el mismo sitio. Las solicitudes que se originan en sitios de terceros a través de enlaces en varias etiquetas como iframe
, img
y form
no tienen estas cookies y, por lo tanto, impiden que el sitio tome medidas que el usuario podría no haber autorizado.Lax
en el atributo SameSite
las cookies de sesión.
ini_set("session.cookie_samesite", "Lax");
SameSite
en las cookies de sesión no está establecido en Strict
.SameSite
protege las cookies de ataques como Cross-site Request Forgery (CSRF). Las cookies de sesión representan a un usuario en el sitio para que el usuario pueda realizar acciones autorizadas. Sin embargo, el navegador envía automáticamente las cookies con la solicitud y, por lo tanto, los usuarios y los sitios web confían implícitamente en el navegador para la autorización. Un atacante puede hacer un uso indebido de esta confianza y realizar una solicitud al sitio en nombre del usuario incrustando enlaces dentro del atributo href
y src
de las etiquetas, como el link
y iframe
, en páginas de sitios de terceros que controle un atacante. Si un atacante atrae a un usuario desprevenido al sitio de terceros que controla, el atacante puede realizar solicitudes que incluyen automáticamente la cookie de sesión con la autorización del usuario. Esto efectivamente le da acceso al atacante con la autorización del usuario.Strict
para el parámetro SameSite
, que restringe el navegador para agregar cookies solo a las solicitudes que son de navegación de nivel superior o se originan en el mismo sitio. Las solicitudes que se originan en sitios de terceros a través de enlaces en varias etiquetas como iframe
, img
y form
no tienen estas cookies y, por lo tanto, impiden que el sitio tome medidas que el usuario podría no haber autorizado.Lax
en el atributo samesite
en las cookies de sesión.
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
establecida en true
.Secure
para cada cookie. Si se define una marca, el explorador solo puede enviar la cookie a través de HTTPS. Enviar cookies a través de un canal no cifrado puede exponerlas a ataques de espionaje de red, por lo que las marcas seguras ayudan a mantener la confidencialidad del valor de una cookie. Esto es especialmente importante cuando la cookie contiene datos privados o porta un identificador de sesión.Secure
.
...
<configuration>
<system.web>
<authentication mode="Forms">
<forms requireSSL="false" loginUrl="login.aspx">
</forms>
</authentication>
</system.web>
</configuration>
...
Secure
, las cookies enviadas durante una solicitud HTTPS también se enviarán en las solicitudes HTTP subsiguientes. El espionaje del tráfico de red a través de conexiones inalámbricas no cifradas es una tarea fácil para los atacantes, por lo que enviar cookies (sobre todo las que incluyen ID de sesión) a través de HTTP puede poner en peligro la aplicación.Secure
para cada cookie. Si se define una marca, el explorador solo puede enviar la cookie a través de HTTPS. Enviar cookies a través de un canal no cifrado puede exponerlas a ataques de espionaje de red, por lo que las marcas seguras ayudan a mantener la confidencialidad del valor de una cookie. Esto es especialmente importante cuando la cookie contiene datos privados o porta un identificador de sesión.Secure
de las cookies de sesión.
server.servlet.session.cookie.secure=false
Secure
, las cookies enviadas durante una solicitud HTTPS también se enviarán en las subsiguientes solicitudes HTTP. Los atacantes pueden secuestrar el tráfico de red no cifrado y poner en peligro la cookie, lo cual es especialmente fácil en el caso de las redes inalámbricas.Secure
en true
.Secure
en cada cookie. Si se incluye una marca, el explorador solo puede enviar la cookie a través de HTTPS. Enviar cookies a través de un canal no cifrado puede exponerlas a ataques de reconocimiento de red, por lo que las marcas seguras ayudan a mantener la confidencialidad del valor de una cookie. Esto es especialmente importante cuando la cookie contiene datos privados o porta un identificador de sesión.Secure
.
...
setcookie("emailCookie", $email, 0, "/", "www.example.com");
...
Secure
, las cookies enviadas durante una solicitud HTTPS también se enviarán en las subsiguientes solicitudes HTTP. Los atacantes pueden secuestrar el tráfico de red no cifrado y poner en peligro la cookie, lo cual es especialmente fácil en el caso de las redes inalámbricas.SESSION_COOKIE_SECURE
en True
o la establece en False
.Secure
en cada cookie. Si se incluye una marca, el explorador solo puede enviar la cookie a través de HTTPS. Enviar cookies a través de un canal no cifrado puede exponerlas a ataques de reconocimiento de red, por lo que las marcas seguras ayudan a mantener la confidencialidad del valor de una cookie. Esto es especialmente importante cuando la cookie contiene datos privados o identificadores de sesión, o cuando porta un token de CSRF.Secure
para las cookies de sesión.
...
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
, las cookies enviadas durante una solicitud HTTPS también se enviarán en las subsiguientes solicitudes HTTP. Los atacantes pueden secuestrar el tráfico de red no cifrado y poner en peligro la cookie, lo cual es especialmente fácil en el caso de las redes inalámbricas.
<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
puede leer el valor de Username
y Password
. Un empleado malintencionado con acceso a esta información puede utilizarla para irrumpir en el 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
que ha iniciado sesión.X-Frame-Options
.X-Frame-Options
.localStorage
y sessionStorage
puede exponer información confidencial inintencionadamente.localStorage
y sessionStorage
de manera que los desarrolladores pueden conservar valores de programa. El mapa sessionStorage
proporciona almacenamiento para la página de invocación y dura solo el tiempo de la instancia de la página y de la sesión inmediata del explorador. El mapa localStorage
, sin embargo, proporciona almacenamiento al que se puede acceder mediante varias instancias de página y varias instancias de explorador. Esta funcionalidad permite a una aplicación conservar y utilizar la misma información en varias pestañas o ventanas de explorador.sessionStorage
al ámbito localStorage
y viceversa.sessionStorage
. No obstante, el desarrollador también almacena la información en el 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
, la información del número CCV ahora está disponible en otras pestañas del explorador además de en las invocaciones nuevas del explorador. Esto omitirá la lógica de la aplicación para el flujo de trabajo previsto.
...
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
y un método de acción de página pageAction()
. El método pageAction()
se ejecuta al visitar la URL de la página y el servidor no comprueba los 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
visita la página malintencionada mientras tiene una sesión activa en el sitio, creará involuntariamente una cuenta para el atacante. Esto es lo que se denomina un ataque CSRF. Este ataque es posible porque la aplicación no tiene forma de determinar la procedencia de la solicitud. Todas las solicitudes podrían ser acciones válidas elegidas por el usuario o acciones engañosas determinadas por un atacante. El atacante no ve la página web que la solicitud falsa genera, por lo que esta técnica de ataque solo es útil para las solicitudes que alteran el estado de la aplicación.
<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
visita la página malintencionada mientras tiene una sesión activa en el sitio, creará sin quererlo una cuenta para el usuario malintencionado. Esto es lo que se denomina un ataque CSRF. Este ataque es posible porque la aplicación no tiene forma de determinar la procedencia de la solicitud. Todas las solicitudes podrían ser acciones válidas elegidas por el usuario o acciones engañosas llevadas a cabo por un atacante. El atacante no ve la página web que la solicitud falsa genera, por lo que esta técnica de ataque solo es útil para las solicitudes que alteran el estado de la aplicación.
<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
visita la página malintencionada mientras tiene una sesión activa en el sitio, creará sin quererlo una cuenta para el usuario malintencionado. Esto es lo que se denomina un ataque CSRF. Este ataque es posible porque la aplicación no tiene forma de determinar la procedencia de la solicitud. Todas las solicitudes podrían ser acciones válidas elegidas por el usuario o acciones engañosas llevadas a cabo por un atacante. El atacante no ve la página web que la solicitud falsa genera, por lo que esta técnica de ataque solo es útil para las solicitudes que alteran el estado de la aplicación.buyItem
.
+ nocsrf
POST /buyItem controllers.ShopController.buyItem
shop.com
, comprará sin quererlo artículos para el atacante. Esto es lo que se denomina un ataque CSRF. Este ataque es posible porque la aplicación no tiene forma de determinar la procedencia de la solicitud. Todas las solicitudes podrían ser acciones válidas elegidas por el usuario o acciones engañosas determinadas por un atacante. El atacante no ve la página web que la solicitud falsa genera, por lo que esta técnica de ataque solo es útil para las solicitudes que alteran el estado de la aplicación.
<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
visita la página malintencionada mientras tiene una sesión activa en el sitio, creará sin quererlo una cuenta para el usuario malintencionado. Esto es lo que se denomina un ataque CSRF. Este ataque es posible porque la aplicación no tiene forma de determinar la procedencia de la solicitud. Todas las solicitudes podrían ser acciones válidas elegidas por el usuario o acciones engañosas llevadas a cabo por un atacante. El atacante no ve la página web que la solicitud falsa genera, por lo que esta técnica de ataque solo es útil para las solicitudes que alteran el estado de la aplicación.
@GetMapping("/ai")
String generation(String userInput) {
return this.chatClient.prompt()
.user(userInput)
.call()
.content();
}
message
, y se la muestra al usuario.
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
, y se la muestra al usuario.
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
. Por lo tanto, un ataque XSS solo es posible si la respuesta usa este tipo de MIME o cualquier otro que también fuerce al explorador a representar la respuesta como HTML u otro documento que pueda ejecutar scripts, como imágenes SVG (image/svg+xml
), documentos XML (application/xml
), etc. application/octet-stream
. Sin embargo, algunos exploradores como Internet Explorer realizan lo que se conoce como Content Sniffing
. Content Sniffing consiste en ignorar el tipo de MIME proporcionado e intentar deducir el tipo de MIME correcto a partir del contenido de la respuesta.text/html
es solo uno de los tipos de MIME que pueden generar vulnerabilidades a ataques XSS. Otros documentos que pueden ejecutar scripts, como las imágenes SVG (image/svg+xml
) y los documentos XML (application/xml
) entre otros, pueden provocar vulnerabilidades a ataques XSS con independencia de si el explorador realiza Content Sniffing. <html><body><script>alert(1)</script></body></html>
podría representarse como HTML aunque su encabezado content-type
esté definido en application/octet-stream
, multipart-mixed
, etc.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 en <html><body><script>alert(1)</script></body></html>
, el servidor produce la siguiente respuesta:
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
. Por lo tanto, un ataque XSS solo es posible si la respuesta usa este tipo de MIME o cualquier otro que también fuerce al explorador a representar la respuesta como HTML u otro documento que pueda ejecutar scripts, como imágenes SVG (image/svg+xml
), documentos XML (application/xml
), etc. application/json
. Sin embargo, algunos exploradores como Internet Explorer realizan lo que se conoce como Content Sniffing
. Content Sniffing consiste en ignorar el tipo de MIME proporcionado e intentar deducir el tipo de MIME correcto a partir del contenido de la respuesta.Cabe destacar que un tipo de MIME de text/html
es solo uno de los tipos de MIME que pueden generar vulnerabilidades a ataques XSS.image/svg+xml
) y los documentos XML (application/xml
) entre otros, pueden provocar vulnerabilidades a ataques XSS con independencia de si el explorador realiza Content Sniffing. <html><body><script>alert(1)</script></body></html>
podría representarse como HTML aunque su encabezado content-type
esté definido en 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 en <html><body><script>alert(1)</script></body></html>
, el servidor produce la siguiente respuesta:
HTTP/1.1 200 OK
Content-Length: 88
Content-Type: application/json
Connection: Closed
{'name': '<html><body><script>alert(1)</script></body></html>'}