我有以下代码来创建位图:
//raw data
PBYTE firstPixel = (PBYTE)((PBYTE)AnsiBdbRecord) + sizeof(WINBIO_BDB_ANSI_381_RECORD);
// declare other bmp structures
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER info;
RGBQUAD rq[256];
// create the grayscale palette
for (int i = 0; i<256; i++)
{
rq[i].rgbBlue = i;
rq[i].rgbGreen = i;
rq[i].rgbRed = i;
rq[i].rgbReserved = 0;
}
//RGBQUAD bl = { 0,0,0,0 }; //black color
//RGBQUAD wh = { 0xff,0xff,0xff,0xff }; // white color
// andinitialize them to zero
memset(&bmfh, 0, sizeof(BITMAPFILEHEADER));
memset(&info, 0, sizeof(BITMAPINFOHEADER));
// fill the fileheader with data …
Run Code Online (Sandbox Code Playgroud) 我一直在研究 OWASP 建议以防止 CSRF 攻击(https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet)。
现在,我不明白的是,这将如何防止 XSS 和 CSRF 攻击的组合攻击。假设我们有以下攻击场景:
攻击者能够执行存储型 XSS 攻击,以便每次用户访问该页面时都会执行攻击者在网站上插入的脚本。
该脚本将完全重新设计 DOM,例如,攻击者的脚本不再需要用户提供一些不相关的信息的原始表单,而是重新设计该表单,以便将该表单重新设计为添加具有管理员权限的用户的表单。请注意,用户不会看到这一点,因为字段的标签将保持不变。只是 POST 会有所不同。
攻击者知道该网站使用反 CSRF 令牌。查看 OWASP 建议:“(..)应用程序应包含一个具有通用名称(如“CSRFToken”)的隐藏输入参数”,攻击者知道大多数网站在页面上的某处都会有一个带有此 id 的隐藏字段。
攻击者确保该字段的值也在伪造的 POST 中提交。即使攻击者不知道这个隐藏字段的值,它也可以在 POST 中指定该值应与请求一起发送。这是可能的,因为用户的 DOM 已被修改,请求将来自用户的浏览器,用户的 cookie 也会随请求一起发送。
用户提交表单,然后创建假用户。
在我看来,仅使用 CSRF 令牌无法避免这种情况。或者同步器模式的隐含假设是 XSS 攻击已被消除?