CSRF跨站请求伪造
攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。跨站请求可以用各种方式:图片URL、超链接、CORS、Form提交等等。一个典型的CSRF攻击有着如下的流程:
- 受害者登录a.com,并保留了登录凭证(Cookie)。
- 攻击者引诱受害者访问了b.com。
- b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie。
- a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。
- a.com以受害者的名义执行了act=xx。
- 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作。
防护措施:
CSRF通常从第三方网站发起,被攻击的网站无法防止攻击发生,只能通过增强自己网站针对CSRF的防护能力来提升安全性。
- 阻止不明外域的访问,如同源检测。在HTTP协议中,每一个异步请求都会携带两个Header,用于标记来源域名。Origin Header、Referer Header。这两个Header在浏览器发起请求时,大多数情况会自动带上,并且不能由前端自定义内容。 服务器可以通过解析这两个Header中的域名,确定请求的来源域。
- 添加Token。我们可以要求所有的用户请求都携带一个CSRF攻击者无法获取到的Token。服务器通过校验请求是否携带正确的Token,来把正常的请求和攻击的请求区分开,也可以防范CSRF的攻击。
- 验证码
XSS跨站脚本攻击
是一种客户端访问嵌入有恶意脚本代码的Web页面,从而盗取信息、利用身份等的一种攻击行为。XSS属于客户端攻击,受害者最终是用户。攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。当页面被注入了恶意 JavaScript 脚本时,浏览器无法区分这些脚本是被恶意注入的还是正常的页面内容,所以恶意注入 JavaScript 脚本也拥有所有的脚本权限:
- 可以窃取 Cookie 信息。恶意 JavaScript 可以通过“document.cookie”获取 Cookie 信息
- 可以监听用户行为。恶意 JavaScript 可以使用“addEventListener”接口来监听键盘事件,
- 可以通过修改 DOM伪造假的登录窗口,用来欺骗用户输入用户名和密码等信息。
- 还可以在页面内生成浮窗广告,严重地影响用户体验。
防护措施:
- 输入验证:进行严格的输入验证,包括对用户输入的数据进行过滤和验证,确保只接受符合预期格式的数据。可以使用白名单过滤或编码转义等技术来防止恶意脚本注入。
- 输出编码:在将用户输入的内容输出到页面或其他上下文中时,进行适当的编码转义。这样可以防止恶意脚本在用户端执行。
- 定期更新和修补漏洞:及时更新框架、库和应用程序的补丁,以修复已知的漏洞。