[web] 跨域问题及CSRF、XSS攻击

同源策略是浏览器安全基础,限制接口请求和DOM查询以防止CSRF和XSS攻击。解决方案通常涉及CORS配置,允许特定源访问。XSS攻击则通过设置HttpOnly cookie和数据过滤来防范。了解这些概念对于Web应用的安全至关重要。
摘要由CSDN通过智能技术生成

问题原因-浏览器同源策略

同源:

  1. 协议相同
  2. 域名相同
  3. 端口相同

浏览器是从两个方面去做这个同源策略的

  1. 针对接口的请求
  2. 针对Dom的查询

没有同源策略限制的接口请求

我们经常用cookie来记住用户的登录信息,如果你请求了接口进行登录,服务端验证通过后会在响应头加入Set-Cookie字段,然后下次再发请求的时候,浏览器会自动将cookie附加在HTTP请求的头字段Cookie中,服务端就能知道这个用户已经登录过了。由于没有同源策略的限制,它向淘宝发了个请求!然后淘宝就会在响应头加入Set-Cookie字段,这样下次再发请求的时候,浏览器会自动将cookie附加在HTTP请求的头字段中发给钓鱼网站,这样一来,这个不法网站就相当于登录了你的账号。也就是CSRF攻击

题外话,即使有了同源策略限制,但cookie是明文的,还不是一样能拿下来。其实服务端可以设置httpOnly,使得前端无法操作cookie,用来防止XSS攻击

没有同源策略限制的Dom查询

有一个钓鱼网站直接引入了淘宝登录的页面,同时监听你账号密码输入框的事件,这样就直接拿到了你的密码。

<iframe name="yinhang" src="www.yinhang.com"></iframe>

解决方案

现在访问某个系统的所有请求一般都要经过网关,所以在网关微服务配置CORS拦截器就好了。

这种处理方式前端代码不用做任何变化,是最常用的方式

@Configuration
public class GulimallCorsConfiguration {
    @Bean // 添加过滤器
    public CorsWebFilter corsWebFilter() {
        // 基于url跨域,选择reactive包下的
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        // 跨域配置信息
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        // 允许跨域的头
        corsConfiguration.addAllowedHeader("*");
        // 允许跨域的请求方式
        corsConfiguration.addAllowedMethod("*");
        // 允许跨域的请求来源
        corsConfiguration.addAllowedOrigin("*");
        // 是否允许携带cookie跨域
        corsConfiguration.setAllowCredentials(true);

        // 任意url都要进行跨域配置
        source.registerCorsConfiguration("/**", corsConfiguration);
        return new CorsWebFilter(source);
    }
}

XSS攻击

简介

XSS 全称(Cross Site Scripting) 跨站脚本攻击, 是Web程序中最常见的漏洞。指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的. 比如获取用户的Cookie,导航到恶意网站,携带木马等。

示例

假如有下面一个textbox

<input type="text" name="address1" value="value1from">

value1from是来自用户的输入,如果用户不是输入value1from,而是输入 " onfocus="alert(document.cookie) 那么就会变成

<input type="text" name="address1" value="" onfocus="alert(document.cookie)">

事件被触发的时候嵌入的JavaScript代码将会被执行

攻击的威力,取决于用户输入了什么样的脚本

解决

  1. 将重要的cookie标记为http only, 这样的话Javascript 中的document.cookie语句就不能获取到cookie了.
  2. 只允许用户输入我们期望的数据。 例如: 年龄的textbox中,只允许用户输入数字。 而数字之外的字符都过滤掉。
  3. 对数据进行Html Encode 处理。将其中的"中括号", “单引号”,“引号” 之类的特殊字符进行编码。
  4. 过滤或移除特殊的Html标签, 例如:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值