SameSite
屬性。SameSite
參數會限制 Cookie 的範圍,所以只會在要求是從第一方或相同網站環境產生時,才會附加到要求。這有助於防範來自 Cross-Site Request Forgery (CSRF) 攻擊者的 Cookie。SameSite
參數可以有以下三個值:Strict
時,Cookie 僅與最上層導覽的要求一起傳送。Lax
時,Cookie 會與來自同一主機的最上層導覽以及從第三方網站發起到主機的 GET 要求一起傳送。例如,假設第三方網站使用 iframe
或 href
標籤來連結至主機網站。如果使用者點選連結,要求將會包含 Cookie。SameSite
屬性設為 None
。
...
Cookie cookie = new Cookie('name', 'Foo', path, -1, true, 'None');
...
SameSite
屬性。SameSite
屬性限制了 Cookie 的範圍,所以只會在要求是從第一方或相同網站環境產生時,才會附加到要求。這有助於防範來自 Cross-Site Request Forgery (CSRF) 攻擊者的 Cookie。SameSite
屬性可以有以下三個值:Strict
時,Cookie 僅與最上層導覽的要求一起傳送。Lax
時,Cookie 會從同一主機透過頂層導覽傳送,還有透過來自第三方網站的 GET 要求傳送,包括那些具有 iframe
或 href
標籤 (會連結至主機站點) 的要求。如果使用者點選連結,要求將會包含 Cookie。SameSite
屬性。
...
CookieOptions opt = new CookieOptions()
{
SameSite = SameSiteMode.None;
};
context.Response.Cookies.Append("name", "Foo", opt);
...
SameSite
屬性。SameSite
屬性限制了 Cookie 的範圍,所以只會在要求是從第一方或相同網站環境產生時,才會附加到要求。這有助於防範來自 Cross-Site Request Forgery (CSRF) 攻擊者的 Cookie。SameSite
屬性可以有以下三個值:Strict
時,Cookie 僅與最上層導覽的要求一起傳送。Lax
時,Cookie 會與來自同一主機的最上層導覽以及從第三方網站發起到主機的 GET 要求一起傳送。例如,假設第三方網站使用 iframe
或 href
標籤來連結至主機網站。如果使用者點選連結,要求將會包含 Cookie。SameSite
屬性。
c := &http.Cookie{
Name: "cookie",
Value: "samesite-none",
SameSite: http.SameSiteNoneMode,
}
SameSite
屬性。SameSite
屬性限制了 Cookie 的範圍,所以只會在要求是從第一方或相同網站環境產生時,才會附加到要求。這有助於防範來自 Cross-Site Request Forgery (CSRF) 攻擊者的 Cookie。SameSite
屬性可以有以下三個值:Strict
時,Cookie 僅與最上層導覽的要求一起傳送。Lax
時,Cookie 會從同一主機透過頂層導覽傳送,還有透過來自第三方網站的 GET 要求傳送,包括那些具有 iframe
或 href
標籤 (會連結至主機站點) 的要求。例如,假設有一個第三方網站使用 iframe
或 href
標籤來連結至主機網站。如果使用者點選連結,要求將會包含 Cookie。SameSite
屬性。
ResponseCookie cookie = ResponseCookie.from("myCookie", "myCookieValue")
...
.sameSite("None")
...
SameSite
屬性。SameSite
屬性限制了 Cookie 的範圍,所以只會在要求是從第一方或相同網站環境產生時,才會附加到要求。這有助於防範來自 Cross-Site Request Forgery (CSRF) 攻擊者的 Cookie。SameSite
屬性可以有以下三個值:Strict
時,Cookie 僅與最上層導覽的要求一起傳送。Lax
時,Cookie 會從同一主機透過頂層導覽傳送,還有透過來自第三方網站的 GET 要求傳送,包括那些具有 iframe
或 href
標籤 (會連結至主機站點) 的要求。例如,假設有一個第三方網站使用 iframe
或 href
標籤來連結至主機網站。如果使用者點選連結,要求將會包含 Cookie。SameSite
屬性。
app.get('/', function (req, res) {
...
res.cookie('name', 'Foo', { sameSite: false });
...
}
SameSite
屬性。SameSite
屬性限制了 Cookie 的範圍,所以只會在要求是從第一方或相同網站環境產生時,才會附加到要求。這有助於防範來自 Cross-Site Request Forgery (CSRF) 攻擊者的 Cookie。SameSite
屬性可以有以下三個值:Strict
時,Cookie 僅與最上層導覽的要求一起傳送。Lax
時,Cookie 會與來自同一主機的最上層導覽以及從第三方網站發起到主機的 GET 要求一起傳送。例如,假設第三方網站使用 iframe
或 href
標籤來連結至主機網站。如果使用者點選連結,要求將會包含 Cookie。SameSite
屬性。
ini_set("session.cookie_samesite", "None");
SameSite
屬性。samesite
參數會限制 Cookie 的範圍,所以只會在要求是從第一方或相同網站環境產生時,才會附加到要求。這有助於防範來自 Cross-Site Request Forgery (CSRF) 攻擊者的 Cookie。samesite
參數可以有以下三個值:Strict
時,Cookie 僅與最上層導覽的要求一起傳送。Lax
時,Cookie 會與來自同一主機的最上層導覽以及從第三方網站發起到主機的 GET 要求一起傳送。例如,假設第三方網站使用 iframe
或 href
標籤來連結至主機網站。如果使用者點選連結,要求將會包含 Cookie。SameSite
屬性。
response.set_cookie("cookie", value="samesite-none", samesite=None)
.example.com
」) 內啟用。這會將 Cookie 揭露給基礎網域及任何子網域上的所有 Web 應用程式。由於 Cookie 通常具有敏感資訊 (如階段作業識別碼),因此在應用程式間共享 Cookie 可能會使一個應用程式中出現弱點,進而對另一個應用程式造成危害。http://secure.example.com/
部署安全的應用程式,且當使用者登入時,應用程式以網域「.example.com
」設定工作階段 ID Cookie。
HttpCookie cookie = new HttpCookie("sessionID", sessionID);
cookie.Domain = ".example.com";
http://insecure.example.com/
有另一個較不安全的應用程式,且它含有 Cross-Site Scripting 弱點。 任何已向 http://secure.example.com
驗證的使用者在瀏覽 http://insecure.example.com
時,會造成向 http://secure.example.com
暴露其階段作業 Cookie 的風險。insecure.example.com
來自行建立路徑範圍過大的 Cookie,藉此執行可從 secure.example.com
覆寫 Cookie 的 Cookie Poisoning 攻擊。.example.com
」) 內啟用。這會將 cookie 揭露給基礎網域及任何子網域上的所有 Web 應用程式。由於 cookie 通常具有敏感資訊 (如階段作業識別碼),因此在應用程式間共享 cookie 可能會使一個應用程式中出現弱點,進而對另一個應用程式造成危害。http://secure.example.com/
部署安全的應用程式,且當使用者登入時,應用程式以網域「.example.com
」設定工作階段 ID Cookie。
cookie := http.Cookie{
Name: "sessionID",
Value: getSessionID(),
Domain: ".example.com",
}
...
http://insecure.example.com/
有另一個較不安全的應用程式,且它含有 Cross-Site Scripting 弱點。任何已向 http://secure.example.com
驗證的使用者在瀏覽 http://insecure.example.com
時,會造成向 http://secure.example.com
暴露其階段作業 Cookie 的風險。insecure.example.com
來自行建立範圍過大的 Cookie,藉此執行可從 Secure.example.com
覆寫 Cookie 的「Cookie 破壞攻擊」。.example.com
」) 內啟用。這會將 Cookie 揭露給基礎網域及任何子網域上的所有 Web 應用程式。由於 Cookie 通常具有敏感資訊 (如階段作業識別碼),因此在應用程式間共享 Cookie 可能會使一個應用程式中出現弱點,進而對另一個應用程式造成危害。http://secure.example.com/
部署安全的應用程式,且當使用者登入時,應用程式以網域「.example.com
」設定工作階段 ID Cookie。
Cookie cookie = new Cookie("sessionID", sessionID);
cookie.setDomain(".example.com");
http://insecure.example.com/
有另一個較不安全的應用程式,且它含有 Cross-site scripting 的弱點。任何已受 http://secure.example.com
驗證的使用者在瀏覽 http://insecure.example.com
時,會造成向 http://secure.example.com
暴露其階段作業 cookie 的風險。insecure.example.com
來自行建立過大範圍的 cookie,藉此執行可從 secure.example.com
覆寫 cookie 的 Cookie 下毒攻擊。.example.com
」) 內啟用。這會將 Cookie 揭露給基礎網域及任何子網域上的所有 Web 應用程式。由於 Cookie 通常具有敏感資訊 (如階段作業識別碼),因此在應用程式間共享 Cookie 可能會使一個應用程式中出現弱點,進而對另一個應用程式造成危害。http://secure.example.com/
部署安全的應用程式,且當使用者登入時,應用程式以網域「.example.com
」設定工作階段 ID Cookie。
cookie_options = {};
cookie_options.domain = '.example.com';
...
res.cookie('important_cookie', info, cookie_options);
http://insecure.example.com/
有另一個較不安全的應用程式,且它含有 Cross-Site Scripting 的弱點。任何已受 http://secure.example.com
驗證的使用者在瀏覽 http://insecure.example.com
時,會造成向 http://secure.example.com
暴露其階段作業 cookie 的風險。insecure.example.com
來自行建立過大範圍的 cookie,藉此執行可從 secure.example.com
覆寫 cookie 的 Cookie 下毒攻擊。.example.com
」) 內啟用。這會將 Cookie 揭露給基礎網域及任何子網域上的所有 Web 應用程式。由於 Cookie 通常具有敏感資訊 (如階段作業識別碼),因此在應用程式間共享 Cookie 可能會使一個應用程式中出現弱點,進而對另一個應用程式造成危害。http://secure.example.com/
部署安全的應用程式,且當使用者登入時,應用程式以網域「.example.com
」設定工作階段 ID Cookie。
...
NSDictionary *cookieProperties = [NSDictionary dictionary];
...
[cookieProperties setValue:@".example.com" forKey:NSHTTPCookieDomain];
...
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
...
http://insecure.example.com/
有另一個較不安全的應用程式,且它含有 Cross-site scripting 的弱點。任何已受 http://secure.example.com
驗證的使用者在瀏覽 http://insecure.example.com
時,會造成向 http://secure.example.com
暴露其階段作業 cookie 的風險。insecure.example.com
來自行建立過大範圍的 cookie,藉此執行可從 secure.example.com
覆寫 cookie 的 Cookie 下毒攻擊。.example.com
」) 內啟用。這會將 Cookie 揭露給基礎網域及任何子網域上的所有 Web 應用程式。由於 Cookie 通常具有敏感資訊 (如階段作業識別碼),因此在應用程式間共享 Cookie 可能會使一個應用程式中出現弱點,進而對另一個應用程式造成危害。http://secure.example.com/
部署安全的應用程式,且當使用者登入時,應用程式以網域「.example.com
」設定工作階段 ID Cookie。
setcookie("mySessionId", getSessionID(), 0, "/", ".example.com", true, true);
http://insecure.example.com/
有另一個較不安全的應用程式,且它含有 Cross-site scripting 的弱點。任何已受 http://secure.example.com
驗證的使用者在瀏覽 http://insecure.example.com
時,會造成向 http://secure.example.com
暴露其階段作業 cookie 的風險。insecure.example.com
來自行建立過大範圍的 cookie,藉此執行可從 secure.example.com
覆寫 cookie 的 Cookie 下毒攻擊。.example.com
」) 內啟用。這會將 Cookie 揭露給基礎網域及任何子網域上的所有 Web 應用程式。由於 Cookie 通常具有敏感資訊 (如階段作業識別碼),因此在應用程式間共享 Cookie 可能會使一個應用程式中出現弱點,進而對另一個應用程式造成危害。http://secure.example.com/
部署安全的應用程式,且當使用者登入時,應用程式以網域「.example.com
」設定工作階段 ID Cookie。
from django.http.response import HttpResponse
...
def view_method(request):
res = HttpResponse()
res.set_cookie("mySessionId", getSessionID(), domain=".example.com")
return res
...
http://insecure.example.com/
有另一個較不安全的應用程式,且它含有 Cross-Site Scripting 的弱點。任何已受 http://secure.example.com
驗證的使用者在瀏覽 http://insecure.example.com
時,會造成向 http://secure.example.com
暴露其階段作業 cookie 的風險。insecure.example.com
來自行建立過大範圍的 Cookie,藉此執行可從 secure.example.com
覆寫 Cookie 的「Cookie 破壞攻擊」。.example.com
」) 內啟用。這會將 Cookie 揭露給基礎網域及任何子網域上的所有 Web 應用程式。由於 Cookie 通常具有敏感資訊 (如階段作業識別碼),因此在應用程式間共享 Cookie 可能會使一個應用程式中出現弱點,進而對另一個應用程式造成危害。http://secure.example.com/
部署安全的應用程式,且當使用者登入時,應用程式以網域「.example.com
」設定工作階段 ID Cookie。
Ok(Html(command)).withCookies(Cookie("sessionID", sessionID, domain = Some(".example.com")))
http://insecure.example.com/
有另一個較不安全的應用程式,且它含有 Cross-Site Scripting 弱點。 任何已向 http://secure.example.com
驗證的使用者在瀏覽 http://insecure.example.com
時,會造成向 http://secure.example.com
暴露其階段作業 Cookie 的風險。insecure.example.com
來自行建立路徑範圍過大的 Cookie,藉此執行可從 secure.example.com
覆寫 Cookie 的 Cookie Poisoning 攻擊。.example.com
」) 內啟用。這會將 Cookie 揭露給基礎網域及任何子網域上的所有 Web 應用程式。由於 Cookie 通常具有敏感資訊 (如階段作業識別碼),因此在應用程式間共享 Cookie 可能會使一個應用程式中出現弱點,進而對另一個應用程式造成危害。http://secure.example.com/
部署安全的應用程式,且當使用者登入時,應用程式以網域「.example.com
」設定工作階段 ID Cookie。
...
let properties = [
NSHTTPCookieDomain: ".example.com",
NSHTTPCookiePath: "/service",
NSHTTPCookieName: "foo",
NSHTTPCookieValue: "bar",
NSHTTPCookieSecure: true
]
let cookie : NSHTTPCookie? = NSHTTPCookie(properties:properties)
...
http://insecure.example.com/
有另一個較不安全的應用程式,且它含有 Cross-Site Scripting 的弱點。任何已受 http://secure.example.com
驗證的使用者在瀏覽 http://insecure.example.com
時,會造成向 http://secure.example.com
暴露其階段作業 cookie 的風險。insecure.example.com
來自行建立過大範圍的 cookie,藉此執行可從 secure.example.com
覆寫 cookie 的 Cookie 下毒攻擊。/
」) 存取。此舉會將 cookie 揭露給網域上所有的Web 應用程式。由於 cookie 通常具有敏感資訊 (如階段作業識別碼),因此在應用程式間共享 cookie 可能會使一個應用程式中出現弱點,進而對另一個應用程式造成危害。http://communitypages.example.com/MyForum
部署論壇應用程式,且當使用者登入論壇時,應用程式以路徑「/
」設定工作階段 ID Cookie。例如:
...
String path = '/';
Cookie cookie = new Cookie('sessionID', sessionID, path, maxAge, true, 'Strict');
...
http://communitypages.example.com/EvilSite
建立另一個應用程式,並在此論壇中張貼連至此網站的連結。當該論壇的使用者按一下此連結時,瀏覽器會將由 /MyForum
設定的 Cookie 傳送到在 /EvilSite
執行的應用程式。透過竊取階段作業 ID,攻擊者便可危及瀏覽 /EvilSite
之論壇使用者的帳戶安全。/EvilSite
來自行建立過大範圍的 Cookie,藉此執行可從 /MyForum
覆寫 Cookie 的 Cookie 破壞攻擊。/
」,不過,這麼做會將 Cookie 揭露給同一個網域的所有 Web 應用程式。由於 cookie 通常具有敏感資訊 (如階段作業識別碼),因此在應用程式間共享 cookie 可能會使一個應用程式中出現弱點,進而對另一個應用程式造成危害。http://communitypages.example.com/MyForum
部署論壇應用程式,且當使用者登入論壇時,應用程式以路徑「/
」設定工作階段 ID Cookie。
HttpCookie cookie = new HttpCookie("sessionID", sessionID);
cookie.Path = "/";
http://communitypages.example.com/EvilSite
建立另一個應用程式,並在此論壇中張貼連至此網站的連結。當該論壇的使用者按一下此連結時,瀏覽器會將由 /MyForum
設定的 Cookie 傳送到在 /EvilSite
執行的應用程式。透過竊取階段作業 ID,攻擊者便可危及瀏覽 /EvilSite
的任何論壇使用者之帳戶安全。/EvilSite
來自行建立過大範圍的 cookie,藉此執行可從 /MyForum
覆寫 cookie 的 Cookie 下毒攻擊。/
」) 存取。此舉會將 cookie 揭露給網域上所有的Web 應用程式。由於 cookie 通常具有敏感資訊 (如階段作業識別碼),因此在應用程式間共享 cookie 可能會使一個應用程式中出現弱點,進而對另一個應用程式造成危害。http://communitypages.example.com/MyForum
部署論壇應用程式,且當使用者登入論壇時,應用程式以路徑「/
」設定工作階段 ID Cookie。
cookie := http.Cookie{
Name: "sessionID",
Value: sID,
Expires: time.Now().AddDate(0, 0, 1),
Path: "/",
}
...
http://communitypages.example.com/EvilSite
建立另一個應用程式,並在此論壇中張貼連至此網站的連結。當論壇使用者按一下此連結時,瀏覽器會將由 /MyForum
設定的 Cookie 傳送到在 /EvilSite
執行的應用程式。透過竊取階段作業 ID,攻擊者便可危及瀏覽 /EvilSite
之論壇使用者的帳戶安全。/EvilSite
來自行建立範圍過大的 Cookie,藉此執行可從 /MyForum
覆寫 Cookie 的「Cookie 破壞攻擊」。/
」) 存取 Cookie」,不過,這麼做會將 Cookie 揭露給網域上的所有 Web 應用程式。由於 Cookie 通常具有敏感資訊 (如階段作業識別碼),因此在應用程式間共用 Cookie 可能會使一個應用程式中出現弱點,進而對另一個應用程式造成危害。http://communitypages.example.com/MyForum
部署論壇應用程式,且當使用者登入論壇時,應用程式以路徑「/
」設定工作階段 ID Cookie。
Cookie cookie = new Cookie("sessionID", sessionID);
cookie.setPath("/");
http://communitypages.example.com/EvilSite
建立另一個應用程式,並在此論壇中張貼連至此網站的連結。當該論壇的使用者按一下此連結時,瀏覽器會將由 /MyForum
設定的 Cookie 傳送到在 /EvilSite
執行的應用程式。透過竊取階段作業 ID,攻擊者便可危及瀏覽 /EvilSite
的任何論壇使用者之帳戶安全。/EvilSite
來自行建立過大範圍的 cookie,藉此執行可從 /MyForum
覆寫 cookie 的 Cookie 下毒攻擊。/
」) 存取 Cookie」,不過,這麼做會將 Cookie 揭露給網域上的所有 Web 應用程式。由於 Cookie 通常具有敏感資訊 (如階段作業識別碼),因此在應用程式間共用 Cookie 可能會使一個應用程式中出現弱點,進而對另一個應用程式造成危害。http://communitypages.example.com/MyForum
部署論壇應用程式,且當使用者登入論壇時,應用程式以路徑「/
」設定工作階段 ID Cookie。
cookie_options = {};
cookie_options.path = '/';
...
res.cookie('important_cookie', info, cookie_options);
http://communitypages.example.com/EvilSite
建立另一個應用程式,並在此論壇中張貼連至此網站的連結。當該論壇的使用者按一下此連結時,瀏覽器會將由 /MyForum
設定的 Cookie 傳送到在 /EvilSite
執行的應用程式。透過竊取階段作業 ID,攻擊者便可危及瀏覽 /EvilSite
的任何論壇使用者之帳戶安全。/EvilSite
來自行建立過大範圍的 cookie,藉此執行可從 /MyForum
覆寫 cookie 的 Cookie 下毒攻擊。/
」) 存取 Cookie」,不過,這麼做會將 Cookie 揭露給網域上的所有 Web 應用程式。由於 Cookie 通常具有敏感資訊 (如階段作業識別碼),因此在應用程式間共用 Cookie 可能會使一個應用程式中出現弱點,進而對另一個應用程式造成危害。http://communitypages.example.com/MyForum
部署論壇應用程式,且當使用者登入論壇時,應用程式以路徑「/
」設定工作階段 ID Cookie。
...
NSDictionary *cookieProperties = [NSDictionary dictionary];
...
[cookieProperties setValue:@"/" forKey:NSHTTPCookiePath];
...
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
...
http://communitypages.example.com/EvilSite
建立另一個應用程式,並在此論壇中張貼連至此網站的連結。當該論壇的使用者按一下此連結時,瀏覽器會將由 /MyForum
設定的 Cookie 傳送到在 /EvilSite
執行的應用程式。透過竊取階段作業 ID,攻擊者便可危及瀏覽 /EvilSite
的任何論壇使用者之帳戶安全。/EvilSite
來自行建立過大範圍的 cookie,藉此執行可從 /MyForum
覆寫 cookie 的 Cookie 下毒攻擊。/
」) 存取 Cookie」,不過,這麼做會將 Cookie 揭露給網域上的所有 Web 應用程式。由於 Cookie 通常具有敏感資訊 (如階段作業識別碼),因此在應用程式間共用 Cookie 可能會使一個應用程式中出現弱點,進而對另一個應用程式造成危害。http://communitypages.example.com/MyForum
部署論壇應用程式,且當使用者登入論壇時,應用程式以路徑「/
」設定工作階段 ID Cookie。
setcookie("mySessionId", getSessionID(), 0, "/", "communitypages.example.com", true, true);
http://communitypages.example.com/EvilSite
建立另一個應用程式,並在此論壇中張貼連至此網站的連結。當該論壇的使用者按一下此連結時,瀏覽器會將由 /MyForum
設定的 Cookie 傳送到在 /EvilSite
執行的應用程式。透過竊取階段作業 ID,攻擊者便可危及瀏覽 /EvilSite
的任何論壇使用者之帳戶安全。/EvilSite
來自行建立過大範圍的 cookie,藉此執行可從 /MyForum
覆寫 cookie 的 Cookie 下毒攻擊。/
」) 存取 Cookie」,不過,這麼做會將 Cookie 揭露給網域上的所有 Web 應用程式。由於 Cookie 通常具有敏感資訊 (如階段作業識別碼),因此在應用程式間共用 Cookie 可能會使一個應用程式中出現弱點,進而對另一個應用程式造成危害。http://communitypages.example.com/MyForum
部署論壇應用程式,且當使用者登入論壇時,應用程式以路徑「/
」設定工作階段 ID Cookie。
from django.http.response import HttpResponse
...
def view_method(request):
res = HttpResponse()
res.set_cookie("sessionid", value) # Path defaults to "/"
return res
...
http://communitypages.example.com/EvilSite
建立另一個應用程式,並在此論壇中張貼連至此網站的連結。當該論壇的使用者按一下此連結時,瀏覽器會將由 /MyForum
設定的 Cookie 傳送到在 /EvilSite
執行的應用程式。透過竊取階段作業 ID,攻擊者便可危及瀏覽 /EvilSite
的任何論壇使用者之帳戶安全。/EvilSite
來自行建立過大範圍的 Cookie,藉此執行可從 /MyForum
覆寫 Cookie 的「Cookie 破壞攻擊」。/
」) 存取 Cookie」,不過,這麼做會將 Cookie 揭露給網域上的所有 Web 應用程式。由於 Cookie 通常具有敏感資訊 (如階段作業識別碼),因此在應用程式間共用 Cookie 可能會使一個應用程式中出現弱點,進而對另一個應用程式造成危害。http://communitypages.example.com/MyForum
部署論壇應用程式,且當使用者登入論壇時,應用程式以路徑「/
」設定工作階段 ID Cookie。
Ok(Html(command)).withCookies(Cookie("sessionID", sessionID, path = "/"))
http://communitypages.example.com/EvilSite
建立另一個應用程式,並在此論壇中張貼連至此網站的連結。當該論壇的使用者按一下此連結時,瀏覽器會將由 /MyForum
設定的 Cookie 傳送到在 /EvilSite
執行的應用程式。透過竊取階段作業 ID,攻擊者便可危及瀏覽 /EvilSite
的任何論壇使用者之帳戶安全。/EvilSite
來自行建立路徑範圍過大的 Cookie,藉此執行可從 /MyForum
覆寫 Cookie 的 Cookie Poisoning 攻擊。/
」) 存取 Cookie」,不過,這麼做會將 Cookie 揭露給網域上的所有 Web 應用程式。由於 Cookie 通常具有敏感資訊 (如階段作業識別碼),因此在應用程式間共用 Cookie 可能會使一個應用程式中出現弱點,進而對另一個應用程式造成危害。http://communitypages.example.com/MyForum
部署論壇應用程式,且當使用者登入論壇時,應用程式以路徑「/
」設定工作階段 ID Cookie。
...
let properties = [
NSHTTPCookieDomain: "www.example.com",
NSHTTPCookiePath: "/",
NSHTTPCookieName: "foo",
NSHTTPCookieValue: "bar",
NSHTTPCookieSecure: true
]
let cookie : NSHTTPCookie? = NSHTTPCookie(properties:properties)
...
http://communitypages.example.com/EvilSite
建立另一個應用程式,並在此論壇中張貼連至此網站的連結。當該論壇的使用者按一下此連結時,瀏覽器會將由 /MyForum
設定的 Cookie 傳送到在 /EvilSite
執行的應用程式。透過竊取階段作業 ID,攻擊者便可危及瀏覽 /EvilSite
的任何論壇使用者之帳戶安全。/EvilSite
來自行建立過大範圍的 cookie,藉此執行可從 /MyForum
覆寫 cookie 的 Cookie 下毒攻擊。.example.com
"。不過,這麼做會將階段作業 Cookie 揭露給基礎網域名稱及任何子網域中的所有 Web 應用程式。洩漏階段作業 Cookie 可能會造成帳戶洩漏。http://secure.example.com/
部署安全的應用程式,且當使用者登入時,應用程式以網域「.example.com
」設定工作階段 Cookie。
server.servlet.session.cookie.domain=.example.com
http://insecure.example.com/
有另一個較不安全的應用程式,且它含有 Cross-Site Scripting 弱點。任何已向 http://secure.example.com
驗證的使用者在瀏覽 http://insecure.example.com
時,會造成向 http://secure.example.com
暴露其階段作業 Cookie 的風險。.example.com
"。這會將工作階段 Cookie 揭露給基礎網域及任何子網域上的所有 Web 應用程式。在應用程式間共用 Cookie 可能會使一個應用程式中的弱點,對另一個應用程式造成危害。http://secure.example.com/
部署安全的應用程式,且當使用者登入時,應用程式以網域「.example.com
」設定工作階段 Cookie。
session_set_cookie_params(0, "/", ".example.com", true, true);
http://insecure.example.com/
有另一個較不安全的應用程式,且它含有 Cross-site scripting 的弱點。任何已受 http://secure.example.com
驗證的使用者在瀏覽 http://insecure.example.com
時,會造成向 http://secure.example.com
暴露其階段作業 cookie 的風險。/
")。這會將 Cookie 揭露給同一個網域的所有 Web 應用程式。洩漏階段作業 Cookie 會造成帳戶洩漏,因為攻擊者可能使用網域中任一個應用程式的弱點來竊取階段作業 Cookie。http://communitypages.example.com/MyForum
部署論壇應用程式,且當使用者登入論壇時,應用程式以路徑「/
」設定工作階段 Cookie。例如:
server.servlet.session.cookie.path=/
http://communitypages.example.com/EvilSite
建立另一個應用程式,並在此論壇中張貼連至此網站的連結。當論壇使用者按一下此連結時,瀏覽器會將由 /MyForum
設定的工作階段 Cookie 傳送到在 /EvilSite
執行的應用程式。透過使用使用者在 /MyForum
上提供的階段作業 Cookie,攻擊者可對瀏覽到 /EvilSite
的任何論壇使用者帳戶造成危害。/
")。這會將 Cookie 揭露給同一個網域的所有 Web 應用程式。洩漏階段作業 Cookie 會造成帳戶洩漏,因為攻擊者可能使用網域中任一個應用程式的弱點來竊取階段作業 Cookie。http://communitypages.example.com/MyForum
部署論壇應用程式,且當使用者登入論壇時,應用程式以路徑「/
」設定工作階段 Cookie。
session_set_cookie_params(0, "/", "communitypages.example.com", true, true);
http://communitypages.example.com/EvilSite
建立另一個應用程式,並在此論壇中張貼連至此網站的連結。當論壇使用者按一下此連結時,瀏覽器會將由 /MyForum
設定的工作階段 Cookie 傳送到在 /EvilSite
執行的應用程式。透過竊取工作階段 Cookie,攻擊者便可危及瀏覽 /EvilSite
之論壇使用者的帳戶安全。SameSite
屬性未設定為 Strict
。SameSite
參數會限制 Cookie 的範圍,所以只會在要求是從第一方或相同網站環境產生時,才會附加到要求。這有助於防範來自 Cross-Site Request Forgery (CSRF) 攻擊者的 Cookie。SameSite
參數可以有以下三個值:Strict
時,Cookie 僅與最上層導覽的要求一起傳送。Lax
時,Cookie 會與來自同一主機的最上層導覽以及從第三方網站發起到主機的 GET 要求一起傳送。例如,假設第三方網站使用 iframe
或 href
標籤來連結至主機網站。如果使用者點選連結,要求將會包含 Cookie。SameSite
參數設為 Lax
。
...
Cookie cookie = new Cookie('name', 'Foo', path, -1, true, 'Lax');
...
SameSite
屬性未設定為 Strict
。SameSite
屬性可防範來自 Cross-Site Request Forgery (CSRF) 等攻擊的 Cookie。階段作業 Cookie 代表網站的使用者,以便使用者可以執行授權的動作。但是,瀏覽器會自動隨要求傳送 Cookie,因此使用者和網站會間接信任瀏覽器來進行授權。攻擊者可以濫用這種信任,並藉由在攻擊者控制之第三方網站頁面中的 link
和 iframe
等標籤的 href
和 src
屬性中嵌入連結,來代表使用者向網站發出要求。如果攻擊者能將毫無戒心的使用者引誘到他們控制的第三方網站,則攻擊者便可發出要求來自動包含授權使用者的階段作業 Cookie,藉此有效地授權攻擊者,就好像他們是使用者一樣。SameSite
屬性的值設定為 Strict
。這會限制瀏覽器僅將 Cookie 附加至最上層導覽或源自相同網站的要求。透過 iframe
、img
和 form
等各種標籤中的連結,從第三方網站發起的要求沒有這些 Cookie,因此會阻止網站採取使用者可能未授權的動作。SameSite
屬性設定為 Lax
。
...
CookieOptions opt = new CookieOptions()
{
SameSite = SameSiteMode.Lax;
};
context.Response.Cookies.Append("name", "Foo", opt);
...
SameSite
屬性未設定為 SameSiteStrictMode
。SameSite
屬性可防範來自 Cross-Site Request Forgery (CSRF) 等攻擊的 Cookie。階段作業 Cookie 代表網站的使用者,以便使用者可以執行授權的動作。但是,瀏覽器會自動隨要求傳送 Cookie,因此使用者和網站會間接信任瀏覽器來進行授權。攻擊者可以濫用這種信任,並藉由在攻擊者控制之第三方網站頁面中的 link
和 iframe
等標籤的 href
和 src
屬性中嵌入連結,來代表使用者向網站發出要求。如果攻擊者能將毫無戒心的使用者引誘到他們控制的第三方網站,則攻擊者便可發出要求來自動包含授權使用者的階段作業 Cookie,藉此有效地授權攻擊者,就好像他們是使用者一樣。SameSiteStrictMode
的 SameSite
屬性,會限制瀏覽器僅將 Cookie 附加至最上層導覽或源自同一網站的要求。透過 iframe
、img
和 form
等各種標籤中的連結,從第三方網站發起的要求沒有這些 Cookie,因此會阻止網站採取使用者可能未授權的動作。SameSite
屬性中針對工作階段 Cookie 啟用 SameSiteLaxMode
。
c := &http.Cookie{
Name: "cookie",
Value: "samesite-lax",
SameSite: http.SameSiteLaxMode,
}
SameSite
屬性未設定為 Strict
。SameSite
屬性可防範來自 Cross-Site Request Forgery (CSRF) 等攻擊的 Cookie。階段作業 Cookie 代表網站的使用者,以便使用者可以執行授權的動作。但是,瀏覽器會自動隨要求傳送 Cookie,因此使用者和網站會間接信任瀏覽器來進行授權。攻擊者可以濫用這種信任,並藉由在攻擊者控制之第三方網站頁面中的 link
和 iframe
等標籤的 href
和 src
屬性中嵌入連結,來代表使用者向網站發出要求。如果攻擊者能將毫無戒心的使用者引誘到他們控制的第三方網站,則攻擊者便可發出要求來自動包含授權使用者的階段作業 Cookie,藉此有效地授權攻擊者,就好像他們是使用者一樣。SameSite
屬性的值設定為 Strict
。這會限制瀏覽器僅將 Cookie 附加至最上層導覽或源自相同網站的要求。透過 iframe
、img
和 form
等各種標籤中的連結,從第三方網站發起的要求沒有這些 Cookie,因此會阻止網站採取使用者可能未授權的動作。SameSite
屬性設定為 Lax
。
ResponseCookie cookie = ResponseCookie.from("myCookie", "myCookieValue")
...
.sameSite("Lax")
...
}
SameSite
屬性未設定為 Strict
。SameSite
屬性可防範來自 Cross-Site Request Forgery (CSRF) 等攻擊的 Cookie。階段作業 Cookie 代表網站的使用者,以便使用者可以執行授權的動作。但是,瀏覽器會自動隨要求傳送 Cookie,因此使用者和網站會間接信任瀏覽器來進行授權。攻擊者可以濫用這種信任,並藉由在攻擊者控制之第三方網站頁面中的 link
和 iframe
等標籤的 href
和 src
屬性中嵌入連結,來代表使用者向網站發出要求。如果攻擊者能將毫無戒心的使用者引誘到他們控制的第三方網站,則攻擊者便可發出要求來自動包含授權使用者的階段作業 Cookie,藉此有效地授權攻擊者,就好像他們是使用者一樣。SameSite
屬性的值設定為 Strict
。這會限制瀏覽器僅將 Cookie 附加至最上層導覽或源自相同網站的要求。透過 iframe
、img
和 form
等各種標籤中的連結,從第三方網站發起的要求沒有這些 Cookie,因此會阻止網站採取使用者可能未授權的動作。SameSite
屬性設定為 Lax
。
app.get('/', function (req, res) {
...
res.cookie('name', 'Foo', { sameSite: "Lax" });
...
}
SameSite
屬性未設定為 Strict
。SameSite
屬性可防範來自 Cross-Site Request Forgery (CSRF) 等攻擊的 Cookie。階段作業 Cookie 代表網站的使用者,以便使用者可以執行授權的動作。但是,瀏覽器會自動隨要求傳送 Cookie,因此使用者和網站會間接信任瀏覽器來進行授權。攻擊者可以濫用這種信任,並藉由在攻擊者控制之第三方網站頁面中的 link
和 iframe
等標籤的 href
和 src
屬性中嵌入連結,來代表使用者向網站發出要求。如果攻擊者能將毫無戒心的使用者引誘到他們控制的第三方網站,則攻擊者便可發出要求來自動包含授權使用者的階段作業 Cookie,藉此有效地授權攻擊者,就好像他們是使用者一樣。Strict
的 SameSite
屬性,會限制瀏覽器僅將 Cookie 附加至最上層導覽或源自同一網站的要求。透過 iframe
、img
和 form
等各種標籤中的連結,從第三方網站發起的要求沒有這些 Cookie,因此會阻止網站採取使用者可能未授權的動作。SameSite
屬性中啟用 Lax
模式。
ini_set("session.cookie_samesite", "Lax");
SameSite
屬性未設定為 Strict
。SameSite
屬性可防範來自 Cross-Site Request Forgery (CSRF) 等攻擊的 Cookie。階段作業 Cookie 代表網站的使用者,以便使用者可以執行授權的動作。但是,瀏覽器會自動隨要求傳送 Cookie,因此使用者和網站會間接信任瀏覽器來進行授權。攻擊者可以濫用這種信任,並藉由在攻擊者控制之第三方網站頁面中的 link
和 iframe
等標籤的 href
和 src
屬性中嵌入連結,來代表使用者向網站發出要求。如果攻擊者能將毫無戒心的使用者引誘到他們控制的第三方網站,則攻擊者便可發出要求來自動包含授權使用者的階段作業 Cookie。這可以有效為攻擊者提供使用者授權的存取權限。SameSite
參數中,將階段作業 Cookie 設為 Strict
,會限制瀏覽器僅將 Cookie 附加至最上層導覽或源自同一網站的要求。透過 iframe
、img
和 form
等各種標籤中的連結,從第三方網站發起的要求沒有這些 Cookie,因此會阻止網站採取使用者可能未授權的動作。samesite
屬性中針對工作階段 Cookie 啟用 Lax
。
response.set_cookie("cookie", value="samesite-lax", samesite="Lax")
...
Integer maxAge = 60*60*24*365*10;
Cookie cookie = new Cookie('emailCookie', emailCookie, path, maxAge, true, 'Strict');
...
HttpCookie cookie = new HttpCookie("emailCookie", email);
cookie.Expires = DateTime.Now.AddYears(10);;
Cookie cookie = new Cookie("emailCookie", email);
cookie.setMaxAge(60*60*24*365*10);
...
NSDictionary *cookieProperties = [NSDictionary dictionary];
...
[cookieProperties setValue:[[NSDate date] dateByAddingTimeInterval:(60*60*24*365*10)] forKey:NSHTTPCookieExpires];
...
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
...
setcookie("emailCookie", $email, time()+60*60*24*365*10);
from django.http.response import HttpResponse
...
def view_method(request):
res = HttpResponse()
res.set_cookie("emailCookie", email, expires=time()+60*60*24*365*10, secure=True, httponly=True)
return res
...
Ok(Html(command)).withCookies(Cookie("sessionID", sessionID, maxAge = Some(60*60*24*365*10)))
...
let properties = [
NSHTTPCookieDomain: "www.example.com",
NSHTTPCookiePath: "/service",
NSHTTPCookieName: "foo",
NSHTTPCookieValue: "bar",
NSHTTPCookieSecure: true,
NSHTTPCookieExpires : NSDate(timeIntervalSinceNow: (60*60*24*365*10))
]
let cookie : NSHTTPCookie? = NSHTTPCookie(properties:properties)
...
server.servlet.session.cookie.persistent=true
session_set_cookie_params(time()+60*60*24*365*10, "/", "www.example.com", false, true);
Secure
旗標未設為 true
。Secure
旗標。若已設定旗標,則瀏覽器僅會透過 HTTPS 傳送 Cookie。透過未加密的通道傳送 Cookie,易使 Cookie 受到網路攔截攻擊,因此安全旗標可維持 Cookie 值的機密性。若 Cookie 包含隱私資料或附帶階段作業識別碼,這將更為重要。Secure
旗標。
...
<configuration>
<system.web>
<authentication mode="Forms">
<forms requireSSL="false" loginUrl="login.aspx">
</forms>
</authentication>
</system.web>
</configuration>
...
Secure
旗標,則在後續的 HTTP 要求期間,也會傳送在 HTTPS 要求時所傳送的 Cookie。透過未加密的無線連線攔截網路流量,對攻擊者而言是稀鬆平常之事,所以透過 HTTP 傳送 Cookie (尤其是含階段作業 ID 的 Cookie) 可能會造成應用程式資料外洩。Secure
旗標。若已設定旗標,則瀏覽器僅會透過 HTTPS 傳送 Cookie。透過未加密的通道傳送 Cookie,易使 Cookie 受到網路攔截攻擊,因此安全旗標可維持 Cookie 值的機密性。若 Cookie 包含隱私資料或附帶階段作業識別碼,這將更為重要。Secure
旗標。
server.servlet.session.cookie.secure=false
Secure
旗標,則在後續的 HTTP 要求期間,也會傳送在 HTTPS 要求時所傳送的 Cookie。隨後攻擊者可能會攔截未加密的網路流量,進而危及 Cookie,這在無線網路會更加容易。Secure
旗標設為 true
Secure
旗標。若已設定旗標,則瀏覽器僅會透過 HTTPS 傳送 cookie。透過未加密的通道傳送 cookie,易使 cookie 受到網路攔截攻擊,因此安全旗標可維持 cookie 值的機密性。若 cookie 包含隱私資料或附帶階段作業識別碼,這將更為重要。Secure
旗標。
...
setcookie("emailCookie", $email, 0, "/", "www.example.com");
...
Secure
旗標,則在後續的 HTTP 要求期間,也會傳送在 HTTPS 要求時所傳送的 Cookie。隨後攻擊者可能會攔截未加密的網路流量,進而危及 Cookie,這在無線網路會更加容易。SESSION_COOKIE_SECURE
屬性明確設為 True
,或是將其設為 False
。Secure
旗標。若已設定旗標,則瀏覽器僅會透過 HTTPS 傳送 cookie。透過未加密的通道傳送 cookie,易使 cookie 受到網路攔截攻擊,因此安全旗標可維持 cookie 值的機密性。如果 Cookie 包含私人資料或階段作業識別碼,或附帶 CSRF 權杖,這將更為重要。Secure
位元。
...
MIDDLEWARE = (
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'csp.middleware.CSPMiddleware',
'django.middleware.security.SecurityMiddleware',
...
)
...
Secure
旗標,則在後續的 HTTP 要求期間,也會傳送在 HTTPS 要求時所傳送的 Cookie。隨後攻擊者可能會攔截未加密的網路流量,進而危及 Cookie,這在無線網路會更加容易。
<cfquery name = "GetCredentials" dataSource = "master">
SELECT Username, Password
FROM Credentials
WHERE DataSource="users"
</cfquery>
...
<cfquery name = "GetSSNs" dataSource = "users"
username = "#Username#" password = "#Password#">
SELECT SSN
FROM Users
</cfquery>
...
master
表格的存取權,便能夠讀取 Username
和 Password
的值。如果心懷不軌的員工擁有此資訊的存取權,他們可以利用此資訊來進入並破壞系統。
...
<cfquery name = "GetSSNs" dataSource = "users"
username = "scott" password = "tiger">
SELECT SSN
FROM Users
</cfquery>
...
...
Credentials.basic("hardcoded-username", password);
...
...
PARAMETERS: p_input TYPE sy-mandt.
SELECT *
FROM employee_records
CLIENT SPECIFIED
INTO TABLE tab_output
WHERE mandt = p_input.
...
SY-MANDT
之外的用戶端檢視員工詳細資料。X-Frame-Options
表頭指定框架原則。X-Frame-Options
表頭指定框架原則。localStorage
與 sessionStorage
之間傳遞數值時,可能在不知不覺中暴露敏感資訊。localStorage
和 sessionStorage
對應,可讓開發人員維持程式值。sessionStorage
對應提供呼叫頁面的儲存空間,且持續時間為頁面實例和即時瀏覽器階段作業運算期間。但 localStorage
對應則是提供可在多個頁面實例和瀏覽器實例存取的儲存空間。此功能可讓應用程式在多個瀏覽器標籤或視窗中維持並使用相同的資訊。sessionStorage
範圍移至 localStorage
(反之亦然)。sessionStorage
物件中。但是,開發人員也會將資訊儲存在 localStorage
物件中。
...
try {
sessionStorage.setItem("userCCV", currentCCV);
} catch (e) {
if (e == QUOTA_EXCEEDED_ERR) {
alert('Quota exceeded.');
}
}
...
...
var retrieveObject = sessionStorage.getItem("userCCV");
try {
localStorage.setItem("userCCV",retrieveObject);
} catch (e) {
if (e == QUOTA_EXCEEDED_ERR) {
alert('Quota exceeded.');
}
...
var userCCV = localStorage.getItem("userCCV");
...
}
...
localStorage
物件中,使用者可以在其他瀏覽器標籤中和呼叫新瀏覽器時使用 CCV 資訊。這樣會略過應用程式原本工作流程的邏輯。
...
var params:Object = LoaderInfo(this.root.loaderInfo).parameters;
var url:String = String(params["url"]);
var ldr:Loader = new Loader();
var urlReq:URLRequest = new URLRequest(url);
ldr.load(urlReq);
...
MyAccountActions
和頁面動作方法 pageAction()
。pageAction()
方法會在造訪頁面 URL 時執行,而伺服器不會檢查防 CSRF 權杖。
<apex:page controller="MyAccountActions" action="{!pageAction}">
...
</apex:page>
public class MyAccountActions {
...
public void pageAction() {
Map<String,String> reqParams = ApexPages.currentPage().getParameters();
if (params.containsKey('id')) {
Id id = reqParams.get('id');
Account acct = [SELECT Id,Name FROM Account WHERE Id = :id];
delete acct;
}
}
...
}
<img src="http://my-org.my.salesforce.com/apex/mypage?id=YellowSubmarine" height=1 width=1/>
RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, "/new_user");
body = addToPost(body, new_username);
body = addToPost(body, new_passwd);
rb.sendRequest(body, new NewAccountCallback(callback));
RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, "http://www.example.com/new_user");
body = addToPost(body, "attacker";
body = addToPost(body, "haha");
rb.sendRequest(body, new NewAccountCallback(callback));
example.com
管理員在網站上具有作用中階段作業時造訪了惡意頁面,則會在不知情的情況下為攻擊者建立帳戶。這就是 CSRF 攻擊。這樣是有可能的,因為應用程式無法確定要求的來源。因此任何要求可能是使用者選擇的合法操作,也可能是由攻擊者建立的偽造操作。攻擊者不會看到假造的要求所產生的網頁,所以這種攻擊技術只有對修改應用程式狀態的要求有用。
<http auto-config="true">
...
<csrf disabled="true"/>
</http>
var req = new XMLHttpRequest();
req.open("POST", "/new_user", true);
body = addToPost(body, new_username);
body = addToPost(body, new_passwd);
req.send(body);
var req = new XMLHttpRequest();
req.open("POST", "http://www.example.com/new_user", true);
body = addToPost(body, "attacker");
body = addToPost(body, "haha");
req.send(body);
example.com
管理員在網站上的有效階段作業期間造訪惡意頁面,則會在不知不覺中為攻擊者建立帳戶。這就是 CSRF 攻擊。這樣是有可能的,因為應用程式無法確定要求的來源。因此不論是使用者建立的或是由攻擊者建立的偽造操作,都會被視為合法的操作。攻擊者不會看到假造的要求所產生的網頁,所以這種攻擊技術只有對修改應用程式狀態的要求有用。
<form method="POST" action="/new_user" >
Name of new user: <input type="text" name="username">
Password for new user: <input type="password" name="user_passwd">
<input type="submit" name="action" value="Create User">
</form>
<form method="POST" action="http://www.example.com/new_user">
<input type="hidden" name="username" value="hacker">
<input type="hidden" name="user_passwd" value="hacked">
</form>
<script>
document.usr_form.submit();
</script>
example.com
管理員在網站上的有效階段作業期間造訪惡意頁面,則會在不知不覺中為攻擊者建立帳戶。這就是 CSRF 攻擊。這樣是有可能的,因為應用程式無法確定要求的來源。因此不論是使用者建立的或是由攻擊者建立的偽造操作,都會被視為合法的操作。攻擊者不會看到假造的要求所產生的網頁,所以這種攻擊技術只有對修改應用程式狀態的要求有用。buyItem
控制項方法的 CSRF 保護。
+ nocsrf
POST /buyItem controllers.ShopController.buyItem
shop.com
的階段作業處於作用中狀態期間受騙而造訪惡意頁面,則該使用者會不知不覺地為攻擊者購買項目。 這就是 CSRF 攻擊。 這樣是有可能的,因為應用程式無法確定要求的來源。 因此任何要求可能是使用者選擇的合法操作,也可能是由攻擊者建立的偽造操作。 攻擊者不會看到假造的要求所產生的網頁,所以這種攻擊技術只有對修改應用程式狀態的要求有用。
<form method="POST" action="/new_user" >
Name of new user: <input type="text" name="username">
Password for new user: <input type="password" name="user_passwd">
<input type="submit" name="action" value="Create User">
</form>
<form method="POST" action="http://www.example.com/new_user">
<input type="hidden" name="username" value="hacker">
<input type="hidden" name="user_passwd" value="hacked">
</form>
<script>
document.usr_form.submit();
</script>
example.com
管理員在網站上的有效階段作業期間造訪惡意頁面,則會在不知不覺中為攻擊者建立帳戶。這就是 CSRF 攻擊。這樣是有可能的,因為應用程式無法確定要求的來源。因此不論是使用者建立的或是由攻擊者建立的偽造操作,都會被視為合法的操作。攻擊者不會看到假造的要求所產生的網頁,所以這種攻擊技術只有對修改應用程式狀態的要求有用。
@GetMapping("/ai")
String generation(String userInput) {
return this.chatClient.prompt()
.user(userInput)
.call()
.content();
}
message
擷取回應,並顯示給使用者。
const openai = new OpenAI({
apiKey: ...,
});
const chatCompletion = await openai.chat.completions.create(...);
message = res.choices[0].message.content
console.log(chatCompletion.choices[0].message.content)
val chatCompletionRequest = ChatCompletionRequest(
model = ModelId("gpt-3.5-turbo"),
messages = listOf(...)
)
val completion: ChatCompletion = openAI.chatCompletion(chatCompletionRequest)
response.getOutputStream().print(completion.choices[0].message)
message
擷取回應,並顯示給使用者。
client = openai.OpenAI()
res = client.chat.completions.create(...)
message = res.choices[0].message.content
self.writeln(f"<p>{message}<\p>")
chatService.createCompletion(
text,
settings = CreateCompletionSettings(...)
).map(completion =>
val html = Html(completion.choices.head.text)
Ok(html) as HTML
)
...
text/html
MIME 類型。因此,只有回應使用此 MIME 類型或任何其他也會強制瀏覽器以 HTML 呈現回應或可能會執行指令碼 (例如 SVG 影像 (image/svg+xml
)、XML 文件 (application/xml
等)) 的類型時,XSS 才會運作。 application/octet-stream
) 的回應時,不會呈現 HTML 或執行指令碼。但 Internet Explorer 等部分瀏覽器會執行名為 Content Sniffing
的作業。Content Sniffing 會忽略提供的 MIME 類型,並嘗試依據回應的內容推論正確的 MIME 類型。text/html
的 MIME 類型只是可能導致 XSS 弱點的一種 MIME 類型。可以執行諸如 SVG 影像 (image/svg+xml
)、XML 文件 (application/xml
) 等指令碼的其他文件,也可能導致 XSS 弱點,無論瀏覽器是否執行 Content Sniffing。 <html><body><script>alert(1)</script></body></html>
之類的回應可以呈現為 HTML,即使其 content-type
標頭已設為 application/octet-stream
, multipart-mixed
等。application/octet-stream
回應中反映使用者資料。
@RestController
public class SomeResource {
@RequestMapping(value = "/test", produces = {MediaType.APPLICATION_OCTET_STREAM_VALUE})
public String response5(@RequestParam(value="name") String name){
return name;
}
}
name
參數設為 <html><body><script>alert(1)</script></body></html>
,則伺服器會產生以下回應:
HTTP/1.1 200 OK
Content-Length: 51
Content-Type: application/octet-stream
Connection: Closed
<html><body><script>alert(1)</script></body></html>
text/html
MIME 類型。因此,只有回應使用此 MIME 類型或任何其他也會強制瀏覽器以 HTML 呈現回應或可能會執行指令碼 (例如 SVG 影像 (image/svg+xml
)、XML 文件 (application/xml
等)) 的類型時,XSS 才會運作。 application/json
) 提供回應給大多數現代瀏覽器時,這些瀏覽器並不會呈現 HTML,也不會執行指令碼。但 Internet Explorer 等部分瀏覽器會執行名為 Content Sniffing
的作業。Content Sniffing 會忽略提供的 MIME 類型,並嘗試依據回應的內容推論正確的 MIME 類型。但要特別注意的是,text/html
的 MIME 類型只是可能導致 XSS 弱點的一種 MIME 類型。image/svg+xml
)、XML 文件 (application/xml
) 等指令碼的其他文件,也可能導致 XSS 弱點,無論瀏覽器是否執行 Content Sniffing。 <html><body><script>alert(1)</script></body></html>
之類的回應可以呈現為 HTML,即使其 content-type
標頭已設為 application/json
。application/json
回應中反映使用者資料。
def mylambda_handler(event, context):
name = event['name']
response = {
"statusCode": 200,
"body": "{'name': name}",
"headers": {
'Content-Type': 'application/json',
}
}
return response
name
參數設為 <html><body><script>alert(1)</script></body></html>
,則伺服器會產生以下回應:
HTTP/1.1 200 OK
Content-Length: 88
Content-Type: application/json
Connection: Closed
{'name': '<html><body><script>alert(1)</script></body></html>'}