最近,我使用 Keycloak 的应用程序在身份验证后停止处理 400 令牌请求。
到目前为止,我发现在令牌请求中,Keycloak cookie(AUTH_SESSION_ID、KEYCLOAK_IDENTITY、KEYCLOAK_SESSION)未在请求标头中发送,导致令牌请求失败并且应用程序收到会话错误。
通过深入研究,我发现 Chrome 现在阻止了没有设置 SameSite 属性的 cookie,keycloak cookie 就是这种情况,这就是为什么它们在身份验证后从未在令牌获取请求中解析的原因。
我得到的错误:-
https://blog.chromium.org/2019/10/developers-get-ready-for-new.html
https://adzerk.com/blog/chrome-samesite/
这是非常严重的,因为它阻止了 Keycloak 库保护的应用程序能够与 keycloak 服务器通信。
更新:使用新的 google chrome cookie SameSite 属性,任何使用 cookie 的第三方库没有正确设置 SameSite 属性,cookie 将被忽略。 https://blog.chromium.org/2019/10/developers-get-ready-for-new.html
redhat google-chrome single-sign-on keycloak keycloak-services
我正在花时间尝试修复 veracode 扫描缺陷 CWE-80 网页中与脚本相关的 HTML 标签的不正确中和(基本 XSS)。
我所做的是对后端进行 HTTP 调用,以便打开包含下载文件的 blob。
const xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.responseType = "arraybuffer";
xhr.onreadystatechange = () => {
if (xhr.readyState === 4 && xhr.status === 200) {
var windowUrl = window.URL || window.webkitURL;
var blobUrl = windowUrl.createObjectURL(new Blob([xhr.response]));
const doc = document.createElement('a');
document.body.appendChild(doc);
doc.href = blobUrl;
if (filename) {
doc.download = filename;
}
doc.click();
windowUrl.revokeObjectURL(url);
}
}
xhr.send();
Run Code Online (Sandbox Code Playgroud)
veracode 抱怨这一行
document.body.appendChild(doc);
Run Code Online (Sandbox Code Playgroud)
对 Node.appendChild() 的调用包含跨站点脚本 (XSS) 缺陷。该应用程序使用不受信任的输入填充 HTTP 响应,从而允许攻击者嵌入恶意内容,例如 Javascript 代码,这些内容将在受害者浏览器的上下文中执行。XSS …
我在我的 webapp 应用程序 web.xml 中添加了以下配置
<session-config>
<cookie-config>
<path>/</path>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>
</session-config>
Run Code Online (Sandbox Code Playgroud)
当我启动应用程序时,我发送一个 http 请求来设置此 cookie,并且我可以在带有路径 /、Secure 和 httpOnly 的 http 响应中看到它。
但是,我看不到此 cookie 在以下 http 请求中发送,因此,如果我对以下请求执行 request.getSession().getId() ,我会得到一个空字符串。
我尝试将以下内容添加到我的 tomcat 8.5 上下文以及 WAR 上下文中
<Context sessionCookiePath="/">
Run Code Online (Sandbox Code Playgroud)
但它并没有解决问题。
这是否意味着 JSESSIONID cookie 不安全,因此会被忽略在请求中发送?
众所周知,当我们点击浏览器上的刷新按钮时,我们可以弹出一个询问我们是否确定刷新页面的弹出窗口。通常它是通过在 onbeforeunload 上添加一个事件监听器来完成的。
但是,在我的 Aurelia 应用程序中,我尝试这样做,但它不起作用。
假设这是我的 app.js(根 ModelView)
export class App {
this.refreshClicked = () =>{ return "Are you sure you want to exit?"; };
attached(){
window.addEventListener("onbeforeunload", this.refreshClicked);
}
Run Code Online (Sandbox Code Playgroud)
但是它不起作用,但是,如果我们将 return 语句替换为console.log("clicked")我可以看到侦听器可以正常工作。
有什么帮助吗?
我正在寻找与版本号匹配的正则表达式模式。
我在这里找到的解决方案并不真正符合我的需要。
我需要该模式对单个数字以及后跟 .
有效数字是
1
1.23
1.2.53.4
Run Code Online (Sandbox Code Playgroud)
无效的数字是
01
1.02.3
.1.2
1.2.
-1
Run Code Online (Sandbox Code Playgroud)