前端如何防止Cookie被劫持?
我最近在用Vue做登录功能,后端返回的session cookie好像没加安全属性,担心会被XSS或者中间人攻击偷走。试过在axios里加withCredentials,但不知道前端能不能主动设置cookie的安全标志?
这是我的登录请求代码:
<script>
export default {
methods: {
async login() {
const res = await this.$http.post('/api/login', {
username: 'test',
password: '123456'
}, { withCredentials: true });
// 后端Set-Cookie: sessionId=abc123; Path=/
console.log('登录成功');
}
}
}
</script>
现在浏览器里的cookie既没有HttpOnly也没有Secure,是不是只能靠后端加?前端能做什么防护吗?
首先,确保你在发送AJAX请求时设置了
withCredentials: true,这样浏览器会携带Cookie进行跨域请求。你已经在代码中做了这一点,很好。其次,考虑到XSS攻击的可能性,前端应该尽量避免将敏感信息存储在Cookie中,尤其是那些可以通过其他方式(如JWT)来管理的身份验证令牌。
虽然前端不能设置HttpOnly或Secure标志,但你可以通过Content Security Policy (CSP)来防御XSS攻击。设置一个严格的CSP可以帮助防止恶意脚本注入。标准写法是通过HTTP响应头添加CSP策略,但这通常也是由后端来配置的。
最后,确保你的应用使用HTTPS而不是HTTP,这样可以防止中间人攻击,并且可以安全地设置Secure标志让Cookie只通过HTTPS传输。
总结一下,前端虽然不能直接设置Cookie的安全属性,但可以通过避免存储敏感信息、防御XSS攻击以及确保使用HTTPS来增强安全性。最根本的措施还是在后端正确配置Cookie的属性。