在OAuth 2.0 page的页面中说明如下: state(推荐)应用程序使用state参数来存储特定于请求的数据和/或防止CSRF攻击。授权服务器必须将未修改的状态值返回给应用程序。
但我不清楚国家如何防止CSRF攻击。对于我的想法,如果有人抓住了pakage,那肯定是请求查询参数也已知,所以他可以再次发回它以淡化这个响应。
答案 0 :(得分:0)
常见的方法是将state
存储在用户的会话中(如果存在),或者将其设置在安全的httponly cookie中(如果应用程序是无状态的)。然后在回调函数中比较那些(查询中的state
和会话/ cookie中的function detectHistoryChange(handler) {
document.head.appendChild(document.createElement('script')).text = '(' +
function () {
// injected DOM script is not a content script anymore,
// it can modify objects and functions of the page
var _pushState = history.pushState;
history.pushState = function (state, title, url) {
_pushState.call(this, state, title, url);
window.dispatchEvent(new CustomEvent('state-changed', { detail: state }));
};
// repeat the above for replaceState too
} + ')(); $(this).remove();'; // remove the DOM script element
// And here content script listens to our DOM script custom events
window.addEventListener('state-changed', function (e) {
console.log('History state changed', e.detail, location.hash);
handler();
});
}
。
如果说“package”只是指HTTP流量(中间人攻击),那么如果你使用的是HTTPS协议 - 什么都不能被劫持。这就是为什么强烈建议仅通过HTTPS使用OAuth。