前端网络安全面试题:CSRF 与 XSS

时间:2024-04-22 10:14:34

CSRF

什么是 CSRF

CSRF (Cross-Site Request Forgery): 跨站请求伪造是一种攻击手段,攻击者通过恶意构造一个链接或表单,诱使用户在已登录的目标网站上执行非本意的操作。当用户点击或提交这个恶意内容时,浏览器会自动带上用户的认证凭据(如session cookie),服务器误以为这是用户自己发起的合法请求,从而执行了攻击者设计的操作。例如,攻击者可能通过CSRF获取用户的转账权限,在用户不知情的情况下转走账户资金。

防范措施

  1. 使用CSRF令牌:服务器端为每个敏感操作生成一个一次性使用的随机令牌,并将其附加到表单中或作为Cookie的一部分发送给客户端。客户端在进行相关操作时需同时携带此令牌,服务器验证后才允许执行。
  2. 检查Referer头(不推荐):根据HTTP Referer头判断请求是否来自可信源,但这种方法并不安全,因为Referer可以被浏览器插件、代理或其他因素篡改。
  3. 使用双重认证:除了基于Cookie的身份验证外,增加其他形式的身份验证,如短信验证码等。

XSS

什么是 XSS

XSS (Cross-Site Scripting): 跨站脚本攻击是指攻击者向网页注入恶意脚本,使其在用户的浏览器上运行。这些脚本能够读取或修改用户的Cookie、DOM信息,甚至执行任意操作,比如窃取用户数据、重定向用户、冒充用户等。

防范措施:

  1. 输入过滤与转义:对用户提交的所有数据进行严格的过滤和转义,确保输出至HTML页面的内容不会被执行为JavaScript代码。例如,对HTML标签和特殊字符进行转义。
  2. HTTPOnly Cookie:设置保护Cookie的HTTPOnly属性,防止其通过JavaScript被读取或修改。
  3. 内容安全策略(CSP, Content Security Policy):通过CSP可以限制浏览器只加载指定来源的资源,以及限制内联脚本和样式表的执行,有效抵御XSS攻击。
  4. 同源策略强化:遵循同源策略并尽可能增强其限制,避免不同源的数据交互造成的安全隐患。

关系与区别:

关系

虽然两者都是常见的Web安全问题,但它们是针对不同的攻击层面。CSRF主要涉及身份认证状态的滥用,而XSS则侧重于利用用户的信任执行恶意代码。

区别

  • CSRF攻击通常不需要获取用户的任何信息,而是利用用户的现有身份认证状态发起恶意请求。
  • XSS攻击则需要将恶意脚本注入到网页中,并在用户浏览网页时执行,以便直接获取或操纵用户的敏感信息,或者间接实施更复杂的攻击行为。

总结

总而言之,防范这两种攻击方式的关键在于正确处理和控制用户输入,合理使用安全机制(如Token验证、HTTPOnly、CSP等),以及严格遵守同源策略和其他安全编程原则。