<apex:page controller="accessControl">
<apex:pageBlock >
<apex:pageBlockSection >
<apex:outputText value="Survey Name: "/>
<apex:inputText value="{!surveyName}"/>
</apex:pageBlockSection>
<apex:pageBlockSection >
<apex:outputText value="New Name: "/>
<apex:inputText value="{!newSurveyName}"/>
</apex:pageBlockSection>
<apex:pageBlockSection >
<apex:commandButton value="Update" action="{!updateName}"/>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:page>
public String surveyName { get; set; }
public String newSurveyName { get; set; }
public PageReference updateName() {
Survey__c s = [SELECT Name FROM Survey__c WHERE Name=:surveyName];
s.Name = newSurveyName;
update s;
PageReference page = ApexPages.currentPage();
page.setRedirect(true);
return page;
}
DATA: id TYPE i.
...
id = request->get_form_field( 'invoiceID' ).
CONCATENATE `INVOICEID = '` id `'` INTO cl_where.
SELECT *
FROM invoices
INTO CORRESPONDING FIELDS OF TABLE itab_invoices
WHERE (cl_where).
ENDSELECT.
...
ID
值。虽然界面生成了属于当前用户的清单标识符列表,但是攻击者可以绕过这个界面,从而获取所需的任何清单。由于此示例中的代码没有执行检查以确保用户具有访问所请求清单的权限,因此它会显示任何清单,即使此清单不属于当前用户。
...
var params:Object = LoaderInfo(this.root.loaderInfo).parameters;
var id:int = int(Number(params["invoiceID"]));
var query:String = "SELECT * FROM invoices WHERE id = :id";
stmt.sqlConnection = conn;
stmt.text = query;
stmt.parameters[":id"] = id;
stmt.execute();
...
id
值。虽然界面生成了属于当前用户的清单标识符列表,但是攻击者可以绕过这个界面,从而获取所需的任何清单。由于此示例中的代码没有执行检查以确保用户具有访问所请求清单的权限,因此它会显示任何清单,即使此清单不属于当前用户。inputID
值来源于预定义列表,绑定变量有助于避免 SOQL/SOSL injection。
...
result = [SELECT Name, Phone FROM Contact WHERE (IsDeleted = false AND Id=:inputID)];
...
inputID
的值。如果攻击者能够绕过该接口并使用不同值发送请求,他将可以访问其他联系人信息。由于此例中的代码没有执行检查以确保用户有权访问请求的联系人,所以代码会显示所有联系人,即使该用户无权查看。
...
int16 id = System.Convert.ToInt16(invoiceID.Text);
var invoice = OrderSystem.getInvoices()
.Where(new Invoice { invoiceID = id });
...
id
值。虽然界面生成了属于当前用户的清单标识符列表,但是攻击者可以绕过这个界面,从而获取所需的任何清单。由于此示例中的代码没有执行检查以确保用户具有访问所请求清单的权限,因此它会显示任何清单,即使此清单不属于当前用户。
...
CMyRecordset rs(&dbms);
rs.PrepareSQL("SELECT * FROM invoices WHERE id = ?");
rs.SetParam_int(0,atoi(r.Lookup("invoiceID").c_str()));
rs.SafeExecuteSQL();
...
id
值。虽然界面生成了属于当前用户的清单标识符列表,但是攻击者可以绕过这个界面,从而获取所需的任何清单。由于此示例中的代码没有执行检查以确保用户具有访问所请求清单的权限,因此它会显示任何清单,即使此清单不属于当前用户。
...
ACCEPT ID.
EXEC SQL
DECLARE C1 CURSOR FOR
SELECT INVNO, INVDATE, INVTOTAL
FROM INVOICES
WHERE INVOICEID = :ID
END-EXEC.
...
ID
值。虽然界面生成了属于当前用户的清单标识符列表,但是攻击者可以绕过这个界面,从而获取所需的任何清单。由于此示例中的代码没有执行检查以确保用户具有访问所请求清单的权限,因此它会显示任何清单,即使此清单不属于当前用户。deleteDatabase
方法可能会允许攻击者删除任何数据库。
...
id := request.FormValue("invoiceID")
query := "SELECT * FROM invoices WHERE id = ?";
rows, err := db.Query(query, id)
...
id
值。虽然界面生成了属于当前用户的清单标识符列表,但是攻击者可以绕过这个界面,从而获取所需的任何清单。由于此示例中的代码没有执行检查以确保用户具有访问所请求清单的权限,因此它会显示任何清单,即使此清单不属于当前用户。
...
id = Integer.decode(request.getParameter("invoiceID"));
String query = "SELECT * FROM invoices WHERE id = ?";
PreparedStatement stmt = conn.prepareStatement(query);
stmt.setInt(1, id);
ResultSet results = stmt.execute();
...
id
值。虽然界面生成了属于当前用户的清单标识符列表,但是攻击者可以绕过这个界面,从而获取所需的任何清单。由于此示例中的代码没有执行检查以确保用户具有访问所请求清单的权限,因此它会显示任何清单,即使此清单不属于当前用户。Example 1
以适应 Android 平台。
...
String id = this.getIntent().getExtras().getString("invoiceID");
String query = "SELECT * FROM invoices WHERE id = ?";
SQLiteDatabase db = this.openOrCreateDatabase("DB", MODE_PRIVATE, null);
Cursor c = db.rawQuery(query, new Object[]{id});
...
...
var id = document.form.invoiceID.value;
var query = "SELECT * FROM invoices WHERE id = ?";
db.transaction(function (tx) {
tx.executeSql(query,[id]);
}
)
...
id
值。虽然界面生成了属于当前用户的清单标识符列表,但是攻击者可以绕过这个界面,从而获取所需的任何清单。由于此示例中的代码没有执行检查以确保用户具有访问所请求清单的权限,因此它会显示任何清单,即使此清单不属于当前用户。
...
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"Invoices" inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDesc];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"(id = %@)", invoiceId.text];
[request setPredicate:pred];
NSManagedObject *matches = nil;
NSError *error;
NSArray *objects = [context executeFetchRequest:request error:&error];
if ([objects count] == 0) {
status.text = @"No records found.";
} else {
matches = [objects objectAtIndex:0];
invoiceReferenceNumber.text = [matches valueForKey:@"invRefNum"];
orderNumber.text = [matches valueForKey:@"orderNumber"];
status.text = [NSString stringWithFormat:@"%d records found", [objects count]];
}
[request release];
...
id
值。虽然界面生成了属于当前用户的清单标识符列表,但是攻击者可以绕过这个界面,从而获取所需的任何清单。由于此示例中的代码没有执行检查以确保用户具有访问所请求清单的权限,因此它会显示任何清单,即使此清单不属于当前用户。
...
$id = $_POST['id'];
$query = "SELECT * FROM invoices WHERE id = ?";
$stmt = $mysqli->prepare($query);
$stmt->bind_param('ss',$id);
$stmt->execute();
...
id
值。虽然界面生成了属于当前用户的清单标识符列表,但是攻击者可以绕过这个界面,从而获取所需的任何清单。由于此示例中的代码没有执行检查以确保用户具有访问所请求清单的权限,因此它会显示任何清单,即使此清单不属于当前用户。
procedure get_item (
itm_cv IN OUT ItmCurTyp,
id in varchar2)
is
open itm_cv for ' SELECT * FROM items WHERE ' ||
'invoiceID = :invid' ||
using id;
end get_item;
id
值。虽然界面生成了属于当前用户的清单标识符列表,但是攻击者可以绕过这个界面,从而获取所需的任何清单。由于此示例中的代码没有执行检查以确保用户具有访问所请求清单的权限,因此它会显示任何清单,即使此清单不属于当前用户。
...
id = request.POST['id']
c = db.cursor()
stmt = c.execute("SELECT * FROM invoices WHERE id = %s", (id,))
...
id
值。虽然界面生成了属于当前用户的清单标识符列表,但是攻击者可以绕过这个界面,从而获取所需的任何清单。由于此示例中的代码没有执行检查以确保用户具有访问所请求清单的权限,因此它会显示任何清单,即使此清单不属于当前用户。
...
id = req['invoiceID'].respond_to(:to_int)
query = "SELECT * FROM invoices WHERE id=?"
stmt = conn.prepare(query)
stmt.execute(id)
...
id
值。虽然界面生成了属于当前用户的清单标识符列表,但是攻击者可以绕过这个界面,从而获取所需的任何清单。由于此示例中的代码没有执行检查以确保用户具有访问所请求清单的权限,因此它会显示任何清单,即使此清单不属于当前用户。
def searchInvoice(value:String) = Action.async { implicit request =>
val result: Future[Seq[Invoice]] = db.run {
sql"select * from invoices where id=$value".as[Invoice]
}
...
}
id
值。虽然界面生成了属于当前用户的清单标识符列表,但是攻击者可以绕过这个界面,从而获取所需的任何清单。由于此示例中的代码没有执行检查以确保用户具有访问所请求清单的权限,因此它会显示任何清单,即使此清单不属于当前用户。
...
let fetchRequest = NSFetchRequest()
let entity = NSEntityDescription.entityForName("Invoices", inManagedObjectContext: managedContext)
fetchRequest.entity = entity
let pred : NSPredicate = NSPredicate(format:"(id = %@)", invoiceId.text)
fetchRequest.setPredicate = pred
do {
let results = try managedContext.executeFetchRequest(fetchRequest)
let result : NSManagedObject = results.first!
invoiceReferenceNumber.text = result.valueForKey("invRefNum")
orderNumber.text = result.valueForKey("orderNumber")
status.text = "\(results.count) records found"
} catch let error as NSError {
print("Error \(error)")
}
...
id
值。虽然界面生成了属于当前用户的清单标识符列表,但是攻击者可以绕过这个界面,从而获取所需的任何清单。由于此示例中的代码没有执行检查以确保用户具有访问所请求清单的权限,因此它会显示任何清单,即使此清单不属于当前用户。
...
id = Request.Form("invoiceID")
strSQL = "SELECT * FROM invoices WHERE id = ?"
objADOCommand.CommandText = strSQL
objADOCommand.CommandType = adCmdText
set objADOParameter = objADOCommand.CreateParameter("id" , adString, adParamInput, 0, 0)
objADOCommand.Parameters("id") = id
...
id
值。虽然界面生成了属于当前用户的清单标识符列表,但是攻击者可以绕过这个界面,从而获取所需的任何清单。由于此示例中的代码没有执行检查以确保用户具有访问所请求清单的权限,因此它会显示任何清单,即使此清单不属于当前用户。with sharing
:将强制执行用户共享规则。without sharing
:将不会强制执行共享规则。inherited sharing
:将强制执行调用类的共享规则。当调用类未指定共享关键字时,或者当类本身是入口点(例如 Visualforce 控制器)时,将默认强制执行用户共享规则。
public class TestClass1 {
public List<Contact> getAllTheSecrets() {
return Database.query('SELECT Name FROM Contact');
}
}
public without sharing class TestClass2 {
public List<Contact> getAllTheSecrets() {
return Database.query('SELECT Name FROM Contact');
}
}
public inherited sharing class TestClass3 {
public List<Contact> getAllTheSecrets() {
return Database.query('SELECT Name FROM Contact');
}
}
TestClass1
和 TestClass2
均不安全,因为它们可以在不执行用户共享规则的情况下检索记录。TestClass3
更安全,因为它默认执行共享规则。但是,如果在显式声明使用 without sharing
的类中调用函数 getAllTheSecrets()
,则仍然可以授予未经授权的访问权限。isSecure
参数设置为 true
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 Cookie。通过未加密的通道发送 Cookie 将使其受到 Network Sniffing 攻击,因此该安全标记有助于保护 Cookie 值的机密性。如果 Cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。isSecure
参数设置为 true
。
...
Cookie cookie = new Cookie('emailCookie', emailCookie, path, maxAge, false, 'Strict');
...
isSecure
参数,那么在 HTTPS 请求过程中发送的 Cookie 也会在随后的 HTTP 请求过程中被发送。通过未加密的无线连接探查网络流量对攻击者而言十分简单,因此通过 HTTP 发送 Cookie(特别是具有会话 ID 的 Cookie)可能会危及应用程序安全。Secure
标记设置为 true
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 cookie。通过未加密的通道发送 cookie 将使其受到网络截取攻击,因此安全标记有助于保护 cookie 值的保密性。如果 cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。Secure
属性的情况下,为响应添加了一个 Cookie。
...
HttpCookie cookie = new HttpCookie("emailCookie", email);
Response.AppendCookie(cookie);
...
Secure
标记,那么在 HTTPS 请求过程中发送的 cookie 也会在随后的 HTTP 请求过程中被发送。通过未加密的无线连接截取网络信息流对攻击者而言十分简单,因此通过 HTTP 发送 cookie(特别是具有会话 ID 的 cookie)可能会危及应用程序安全。Secure
标记设置为 true
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 Cookie。通过未加密的通道发送 Cookie 将使其受到 Network Sniffing 攻击,因此该 secure 标记有助于保护 Cookie 值的机密性。如果 Cookie 包含私人数据或会话标识符,或带有 CSRF 标记,那么该标记尤其重要。Secure
标记的情况下将 cookie 添加到响应中。
cookie := http.Cookie{
Name: "emailCookie",
Value: email,
}
http.SetCookie(response, &cookie)
...
Secure
标记,那么在 HTTPS 请求过程中发送的 Cookie 也会在随后的 HTTP 请求过程中被发送。攻击者随后可截取未加密的网络信息流(通过无线网络时十分容易),从而危及 cookie 安全。Secure
标记设置为 true
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 Cookie。通过未加密的通道发送 Cookie 将使其受到 Network Sniffing 攻击,因此该 secure 标记有助于保护 Cookie 值的机密性。如果 Cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。use-secure-cookie
属性允许 remember-me
Cookie 通过未加密的传输发送出去。
<http auto-config="true">
...
<remember-me use-secure-cookie="false"/>
</http>
Secure
标记,那么在 HTTPS 请求过程中发送的 Cookie 也会在随后的 HTTP 请求过程中被发送。通过未加密的无线连接监听网络通信对攻击者而言十分简单,因此通过 HTTP 发送 Cookie(特别是具有会话 ID 的 Cookie)可能会危及应用程序安全。Secure
标记设置为 true
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 cookie。通过未加密的通道发送 cookie 将使其受到网络截取攻击,因此安全标记有助于保护 cookie 值的保密性。如果 cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。Secure
属性设置为 true
的情况下,为响应添加了一个 Cookie。
res.cookie('important_cookie', info, {domain: 'secure.example.com', path: '/admin', httpOnly: true, secure: false});
Secure
标记,那么在 HTTPS 请求过程中发送的 cookie 也会在随后的 HTTP 请求过程中被发送。通过未加密的无线连接截取网络信息流对攻击者而言十分简单,因此通过 HTTP 发送 cookie(特别是具有会话 ID 的 cookie)可能会危及应用程序安全。NSHTTPCookieSecure
标记设置为 TRUE
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 cookie。通过未加密的通道发送 cookie 将使其受到网络截取攻击,因此安全标记有助于保护 cookie 值的保密性。如果 cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。Secure
标记的情况下,为响应添加了一个 Cookie。
...
NSDictionary *cookieProperties = [NSDictionary dictionary];
...
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
...
Secure
标记,那么在 HTTPS 请求过程中发送的 cookie 也会在随后的 HTTP 请求过程中被发送。通过未加密的无线连接截取网络信息流对攻击者而言十分简单,因此通过 HTTP 发送 cookie(特别是具有会话 ID 的 cookie)可能会危及应用程序安全。Secure
标记设置为 true
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 cookie。通过未加密的通道发送 cookie 将使其受到网络截取攻击,因此安全标记有助于保护 cookie 值的保密性。如果 cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。Secure
标记的情况下将 cookie 添加到响应中。
...
setcookie("emailCookie", $email, 0, "/", "www.example.com");
...
Secure
标记,那么在 HTTPS 请求过程中发送的 cookie 也会在随后的 HTTP 请求过程中被发送。攻击者随后可截取未加密的网络信息流(通过无线网络时十分容易),从而危及 cookie 安全。Secure
标记设置为 True
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 cookie。通过未加密的通道发送 cookie 将使其受到网络截取攻击,因此安全标记有助于保护 cookie 值的保密性。如果 cookie 包含私人数据或会话标识符,或带有 CSRF 标记,那么该标记尤其重要。Secure
标记的情况下将 cookie 添加到响应中。
from django.http.response import HttpResponse
...
def view_method(request):
res = HttpResponse()
res.set_cookie("emailCookie", email)
return res
...
Secure
标记,那么在 HTTPS 请求过程中发送的 cookie 也会在随后的 HTTP 请求过程中被发送。攻击者随后可截取未加密的网络信息流(通过无线网络时十分容易),从而危及 cookie 安全。Secure
标记设置为 true
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 Cookie。通过未加密的通道发送 Cookie 将使其受到 Network Sniffing 攻击,因此该 secure 标记有助于保护 Cookie 值的机密性。如果 Cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。Secure
标记的情况下,为响应添加了一个 Cookie。
Ok(Html(command)).withCookies(Cookie("sessionID", sessionID, secure = false))
Secure
标记,那么在 HTTPS 请求过程中发送的 Cookie 也会在随后的 HTTP 请求过程中被发送。通过未加密的无线连接监听网络通信对攻击者而言十分简单,因此通过 HTTP 发送 Cookie(特别是具有会话 ID 的 Cookie)可能会危及应用程序安全。NSHTTPCookieSecure
标记设置为 TRUE
。Secure
标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 Cookie。通过未加密的通道发送 Cookie 将使其受到 Network Sniffing 攻击,因此该 secure 标记有助于保护 Cookie 值的机密性。如果 Cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。Secure
标记的情况下,为响应添加了一个 Cookie。
...
let properties = [
NSHTTPCookieDomain: "www.example.com",
NSHTTPCookiePath: "/service",
NSHTTPCookieName: "foo",
NSHTTPCookieValue: "bar"
]
let cookie : NSHTTPCookie? = NSHTTPCookie(properties:properties)
...
Secure
标记,那么在 HTTPS 请求过程中发送的 Cookie 也会在随后的 HTTP 请求过程中被发送。通过未加密的无线连接监听网络通信对攻击者而言十分简单,因此通过 HTTP 发送 Cookie(特别是具有会话 ID 的 Cookie)可能会危及应用程序安全。SameSite
属性。SameSite
参数限制了 Cookie 的作用域,因此只有当请求是从第一方或同一站点上下文生成时,才会将 Cookie 附加到请求。这样有助于保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 攻击。SameSite
参数可以有以下三个值:Strict
时,Cookie 仅在顶级导航时与请求一起发送。Lax
时,Cookie 会在顶级导航时与从第三方站点发送到主机的 GET 请求一起从同一主机发送。例如,假设第三方站点拥有链接到主机站点的 iframe
或 href
标签。如果用户点击链接,请求将包含 Cookie。SameSite
属性设置为 None
。
...
Cookie cookie = new Cookie('name', 'Foo', path, -1, true, 'None');
...
SameSite
属性。SameSite
属性限制了 Cookie 的作用域,因此只有当请求是从第一方或同一站点上下文生成时,才会将 Cookie 附加到请求。这样有助于保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 攻击。SameSite
属性可以有以下三个值:Strict
时,Cookie 仅在顶级导航时与请求一起发送。Lax
时,Cookie 随同一主机顶级导航时的请求以及来自第三方站点的 GET 请求一起发送,包括那些具有链接到主机站点的 iframe
或 href
标签的请求。如果用户点击链接,请求将包含 Cookie。SameSite
属性。
...
CookieOptions opt = new CookieOptions()
{
SameSite = SameSiteMode.None;
};
context.Response.Cookies.Append("name", "Foo", opt);
...
SameSite
属性。SameSite
属性限制了 Cookie 的作用域,因此只有当请求是从第一方或同一站点上下文生成时,才会将 Cookie 附加到请求。这样有助于保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 攻击。SameSite
属性可以有以下三个值:Strict
时,Cookie 仅在顶级导航时与请求一起发送。Lax
时,Cookie 随顶级导航与从第三方站点发送到主机的 GET 请求一起从同一主机发送。例如,假设第三方站点拥有链接到主机站点的 iframe
或 href
标签。如果用户点击链接,请求将包含 Cookie。SameSite
属性。
c := &http.Cookie{
Name: "cookie",
Value: "samesite-none",
SameSite: http.SameSiteNoneMode,
}
SameSite
属性。SameSite
属性限制了 Cookie 的作用域,因此只有当请求是从第一方或同一站点上下文生成时,才会将 Cookie 附加到请求。这样有助于保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 攻击。SameSite
属性可以有以下三个值:Strict
时,Cookie 仅在顶级导航时与请求一起发送。Lax
时,Cookie 随同一主机顶级导航时的请求以及来自第三方站点的 GET 请求一起发送,包括那些具有链接到主机站点的 iframe
或 href
标签的请求。例如,假设第三方站点拥有链接到主机站点的 iframe
或 href
标签。如果用户点击链接,请求将包含 Cookie。SameSite
属性。
app.get('/', function (req, res) {
...
res.cookie('name', 'Foo', { sameSite: false });
...
}
SameSite
属性。SameSite
属性限制了 Cookie 的作用域,因此只有当请求是从第一方或同一站点上下文生成时,才会将 Cookie 附加到请求。这样有助于保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 攻击。SameSite
属性可以有以下三个值:Strict
时,Cookie 仅在顶级导航时与请求一起发送。Lax
时,Cookie 随顶级导航与从第三方站点发送到主机的 GET 请求一起从同一主机发送。例如,假设第三方站点拥有链接到主机站点的 iframe
或 href
标签。如果用户点击链接,请求将包含 Cookie。SameSite
属性。
session.cookie_samesite="None"
SameSite
属性。samesite
参数限制了 Cookie 的作用域,因此只有当请求是从第一方或同一站点上下文生成时,才会将 Cookie 附加到请求。这样有助于保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 攻击。samesite
参数可以有以下三个值:Strict
时,Cookie 仅在顶级导航时与请求一起发送。Lax
时,Cookie 随顶级导航与从第三方站点发送到主机的 GET 请求一起从同一主机发送。例如,假设第三方站点拥有链接到主机站点的 iframe
或 href
标签。如果用户点击链接,请求将包含 Cookie。SameSite
属性。
response.set_cookie("cookie", value="samesite-none", samesite=None)
/
”)进行访问。这会使 Cookie 暴露在该域的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://communitypages.example.com/MyForum
上部署了一个论坛应用程序,当用户登录该论坛时,该应用程序将使用路径“/
”设置会话 ID Cookie。例如:
...
String path = '/';
Cookie cookie = new Cookie('sessionID', sessionID, path, maxAge, true, 'Strict');
...
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum
设置的 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 ID 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。/EvilSite
来创建自己范围过大的 Cookie,以覆盖来自 /MyForum
的 Cookie,从而执行 Cookie Poisoning 攻击。/
”,然而,这样做会使 Cookie 暴露在域名相同的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://communitypages.example.com/MyForum
上,当用户登录该论坛时,该应用程序将使用路径“/
”设置会话 ID cookie。
HttpCookie cookie = new HttpCookie("sessionID", sessionID);
cookie.Path = "/";
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum
设置的 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 ID 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。/EvilSite
进行 cookie poisoning 攻击,创建自己范围过大的 cookie,并覆盖来自 /MyForum
的 cookie。/
”进行访问。这会使 Cookie 暴露在该域的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://communitypages.example.com/MyForum
上部署了一个论坛应用程序,当用户登录该论坛时,该应用程序将使用路径 "/
" 设置会话 ID Cookie。
cookie := http.Cookie{
Name: "sessionID",
Value: sID,
Expires: time.Now().AddDate(0, 0, 1),
Path: "/",
}
...
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum
设置的 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 ID 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。/EvilSite
进行“Cookie Poisoning 攻击”,创建自己范围过大的 Cookie,并覆盖 /MyForum
中的 Cookie。/
”进行访问。这会使 Cookie 暴露在该域的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://communitypages.example.com/MyForum
上,当用户登录该论坛时,该应用程序将使用路径“/
”设置会话 ID cookie。
Cookie cookie = new Cookie("sessionID", sessionID);
cookie.setPath("/");
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum
设置的 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 ID 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。/EvilSite
进行 cookie poisoning 攻击,创建自己范围过大的 cookie,并覆盖来自 /MyForum
的 cookie。/
”进行访问。这会使 Cookie 暴露在该域的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://communitypages.example.com/MyForum
上,当用户登录该论坛时,该应用程序将使用路径“/
”设置会话 ID cookie。
cookie_options = {};
cookie_options.path = '/';
...
res.cookie('important_cookie', info, cookie_options);
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum
设置的 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 ID 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。/EvilSite
进行 cookie poisoning 攻击,创建自己范围过大的 cookie,并覆盖来自 /MyForum
的 cookie。/
”进行访问。这会使 Cookie 暴露在该域的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://communitypages.example.com/MyForum
上,当用户登录该论坛时,该应用程序将使用路径“/
”设置会话 ID cookie。
...
NSDictionary *cookieProperties = [NSDictionary dictionary];
...
[cookieProperties setValue:@"/" forKey:NSHTTPCookiePath];
...
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
...
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum
设置的 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 ID 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。/EvilSite
进行 cookie poisoning 攻击,创建自己范围过大的 cookie,并覆盖来自 /MyForum
的 cookie。/
”进行访问。这会使 Cookie 暴露在该域的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://communitypages.example.com/MyForum
上,当用户登录该论坛时,该应用程序将使用路径“/
”设置会话 ID cookie。
setcookie("mySessionId", getSessionID(), 0, "/", "communitypages.example.com", true, true);
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum
设置的 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 ID 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。/EvilSite
进行 cookie poisoning 攻击,创建自己范围过大的 cookie,并覆盖来自 /MyForum
的 cookie。/
”进行访问。这会使 Cookie 暴露在该域的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://communitypages.example.com/MyForum
上,当用户登录该论坛时,该应用程序将使用路径“/
”设置会话 ID cookie。
from django.http.response import HttpResponse
...
def view_method(request):
res = HttpResponse()
res.set_cookie("sessionid", value) # Path defaults to "/"
return res
...
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum
设置的 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 ID 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。/EvilSite
进行“Cookie 篡改攻击”,创建自己范围过大的 cookie,并覆盖 /MyForum
中的 cookie。/
”进行访问。这会使 Cookie 暴露在该域的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://communitypages.example.com/MyForum
上部署了一个论坛应用程序,当用户登录该论坛时,该应用程序将使用路径“/
”设置会话 ID Cookie。
Ok(Html(command)).withCookies(Cookie("sessionID", sessionID, path = "/"))
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum
设置的 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 ID 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。/EvilSite
来创建自己范围过大的 Cookie,以覆盖来自 /MyForum
的 Cookie,从而执行 Cookie Poisoning 攻击。/
”进行访问。这会使 Cookie 暴露在该域的所有 Web 应用程序下。由于 Cookie 通常包含敏感信息(如会话标识符),因此在应用程序之间共享 Cookie 可能会导致其中一个应用程序的漏洞危及其他应用程序安全。http://communitypages.example.com/MyForum
上,当用户登录该论坛时,该应用程序将使用路径“/
”设置会话 ID cookie。
...
let properties = [
NSHTTPCookieDomain: "www.example.com",
NSHTTPCookiePath: "/",
NSHTTPCookieName: "foo",
NSHTTPCookieValue: "bar",
NSHTTPCookieSecure: true
]
let cookie : NSHTTPCookie? = NSHTTPCookie(properties:properties)
...
http://communitypages.example.com/EvilSite
上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum
设置的 Cookie 发送到在 /EvilSite
上运行的应用程序。通过这种方式窃取会话 ID 后,攻击者就能够危及浏览到 /EvilSite
的任何论坛用户的帐户安全。/EvilSite
进行 cookie poisoning 攻击,创建自己范围过大的 cookie,并覆盖来自 /MyForum
的 cookie。SameSite
属性未设置为 Strict
。SameSite
参数限制了 Cookie 的作用域,因此只有当请求是从第一方或同一站点上下文生成时,才会将 Cookie 附加到请求。这样有助于保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 攻击。SameSite
参数可以有以下三个值:Strict
时,Cookie 仅在顶级导航时与请求一起发送。Lax
时,Cookie 会在顶级导航时与从第三方站点发送到主机的 GET 请求一起从同一主机发送。例如,假设第三方站点拥有链接到主机站点的 iframe
或 href
标签。如果用户点击链接,请求将包含 Cookie。SameSite
参数设置为 Lax
。
...
Cookie cookie = new Cookie('name', 'Foo', path, -1, true, 'Lax');
...
SameSite
属性未设置为 Strict
。SameSite
属性保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 等攻击。会话 Cookie 代表用户访问站点,以便用户可以执行授权操作。但是,浏览器会自动将 Cookie 与请求一起发送,因此用户和网站会隐式信任浏览器进行授权。攻击者可以滥用此信任,通过在攻击者控制的第三方网站页面中的 link
和 iframe
等标签的 href
和 src
属性中嵌入链接,代表用户向站点发出请求。如果攻击者能够将一位毫无戒备的用户引诱到他们控制的第三方站点,则攻击者可以发出自动包含用于授权该用户的会话 Cookie 的请求,从而可以使攻击者获取有效授权,就像他们是用户一样。SameSite
属性的值设置为 Strict
。这将限制浏览器仅将 Cookie 附加到顶级导航时的请求或来自同一站点的请求。来自第三方站点的请求(通过 iframe
、img
和 form
等各种标签中的链接)不含这些 Cookie,因此能阻止站点采取用户可能未授权的操作。SameSite
属性的值设置为 Lax
。
...
CookieOptions opt = new CookieOptions()
{
SameSite = SameSiteMode.Lax;
};
context.Response.Cookies.Append("name", "Foo", opt);
...
SameSite
属性未设置为 SameSiteStrictMode
。SameSite
属性保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 等攻击。会话 Cookie 代表用户访问站点,以便用户可以执行授权操作。但是,浏览器会自动将 Cookie 与请求一起发送,因此用户和网站会隐式信任浏览器进行授权。攻击者可以滥用此信任,通过在攻击者控制的第三方网站页面中的 link
和 iframe
等标签的 href
和 src
属性中嵌入链接,代表用户向站点发出请求。如果攻击者能够将一位毫无戒备的用户引诱到他们控制的第三方站点,则攻击者可以发出自动包含用于授权该用户的会话 Cookie 的请求,从而可以使攻击者获取有效授权,就像他们是用户一样。SameSite
属性的 SameSiteStrictMode
,这将限制浏览器仅将 Cookie 附加到顶级导航时的请求或来自同一站点的请求。来自第三方站点的请求(通过 iframe
、img
和 form
等各种标签中的链接)不含这些 Cookie,因此能阻止站点采取用户可能未授权的操作。SameSite
属性中的 SameSiteLaxMode
。
c := &http.Cookie{
Name: "cookie",
Value: "samesite-lax",
SameSite: http.SameSiteLaxMode,
}
SameSite
属性未设置为 Strict
。SameSite
属性保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 等攻击。会话 Cookie 代表用户访问站点,以便用户可以执行授权操作。但是,浏览器会自动将 Cookie 与请求一起发送,因此用户和网站会隐式信任浏览器进行授权。攻击者可以滥用此信任,通过在攻击者控制的第三方网站页面中的 link
和 iframe
等标签的 href
和 src
属性中嵌入链接,代表用户向站点发出请求。如果攻击者能够将一位毫无戒备的用户引诱到他们控制的第三方站点,则攻击者可以发出自动包含用于授权该用户的会话 Cookie 的请求,从而可以使攻击者获取有效授权,就像他们是用户一样。SameSite
属性的值设置为 Strict
。这将限制浏览器仅将 Cookie 附加到顶级导航时的请求或来自同一站点的请求。来自第三方站点的请求(通过 iframe
、img
和 form
等各种标签中的链接)不含这些 Cookie,因此能阻止站点采取用户可能未授权的操作。SameSite
属性的值设置为 Lax
。
app.get('/', function (req, res) {
...
res.cookie('name', 'Foo', { sameSite: "Lax" });
...
}
SameSite
属性未设置为 Strict
。SameSite
属性保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 等攻击。会话 Cookie 代表用户访问站点,以便用户可以执行授权操作。但是,浏览器会自动将 Cookie 与请求一起发送,因此用户和网站会隐式信任浏览器进行授权。攻击者可以滥用此信任,通过在攻击者控制的第三方网站页面中的 link
和 iframe
等标签的 href
和 src
属性中嵌入链接,代表用户向站点发出请求。如果攻击者能够将一位毫无戒备的用户引诱到他们控制的第三方站点,则攻击者可以发出自动包含用于授权该用户的会话 Cookie 的请求,从而可以使攻击者获取有效授权,就像他们是用户一样。SameSite
属性的 Strict
,这将限制浏览器仅将 Cookie 附加到顶级导航时的请求或来自同一站点的请求。来自第三方站点的请求(通过 iframe
、img
和 form
等各种标签中的链接)不含这些 Cookie,因此能阻止站点采取用户可能未授权的操作。SameSite
属性中的 Lax
模式。
session.cookie_samesite=Lax
SameSite
属性未设置为 Strict
。SameSite
属性保护 Cookie 免受 Cross-Site Request Forgery (CSRF) 等攻击。会话 Cookie 代表用户访问站点,以便用户可以执行授权操作。但是,浏览器会自动将 Cookie 与请求一起发送,因此用户和网站会隐式信任浏览器进行授权。攻击者可以滥用此信任,通过在攻击者控制的第三方网站页面中的 link
和 iframe
等标签的 href
和 src
属性中嵌入链接,代表用户向站点发出请求。如果攻击者将毫无戒备的用户引诱到他们控制的第三方站点,则攻击者可以发出自动包含具有用户授权的会话 Cookie 的请求。从而可通过用户授权使攻击者获得有效权限。SameSite
参数的 Strict
,这将限制浏览器仅将 Cookie 附加到顶级导航时的请求或来自同一站点的请求。来自第三方站点的请求(通过 iframe
、img
和 form
等各种标签中的链接)不含这些 Cookie,因此能阻止站点采取用户可能未授权的操作。samesite
属性中的 Lax
。
response.set_cookie("cookie", value="samesite-lax", samesite="Lax")