📜  安全测试-同源策略(1)

📅  最后修改于: 2023-12-03 15:09:23.080000             🧑  作者: Mango

安全测试-同源策略

什么是同源策略?

同源策略是浏览器中的一个安全机制,它限制了一个源中的资源能否被另一个源访问。源(origin)是协议(protocol)、主机名(hostname)和端口(port)的组合,只有协议、主机名和端口完全一致,才能算是同一个Origin。

简单来说,当浏览器发起一个跨域请求时,同源策略会限制它是否能够访问响应的数据。如果不符合同源策略,则会出现跨域问题。

同源策略的作用是什么?

同源策略的主要作用是保护用户的信息安全,防止恶意网站通过跨域攻击窃取数据。

例如,假设你在A网站中输入了用户名和密码,A网站通过Ajax请求B网站的数据,如果B网站没有限制跨域请求并返回响应,那么B网站的数据会被暴露给A网站,这就会导致安全问题。

因此,同源策略的作用就是限制Cookie、LocalStorage和IndexDB等客户端存储的读写操作,防止其他的网站篡改你的数据和Cookie。

如何规避同源策略?
JSONP

JSONP是一种通过script标签实现跨域的技术,其原理是利用script标签没有同源策略限制的漏洞。

通过script标签的src属性请求一个相对路径,后端返回一个JavaScript回调函数的调用。

function jsonp(url, callback) {
  const script = document.createElement('script');
  script.type = 'text/javascript';
  script.src = url + '?callback=' + callback;

  document.head.appendChild(script);
}

jsonp('http://www.example.com/jsonp', 'jsonpCallback');

在后端接收到请求并处理好数据后,返回给前端调用函数的代码。

jsonpCallback({"success": true, "data": {"name": "Tom", "age": 20}});
CORS

CORS是一种新型的跨域解决方案,它是一种服务器端改写的技术,可以让服务端决定是否允许跨域请求。

在HTTP请求报文中增加Origin字段,后端返回响应报文的时候增加Access-Control-Allow-Origin头部,只有符合要求的请求才会被允许访问。

app.use(function(req, res, next) {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
  next();
});
代理

通过代理服务器转发信息可以规避同源策略的限制。使用代理服务器,可以将前端请求发送到代理服务器,代理服务器再将请求发送到真正的服务器,获取到数据后返回给前端。

app.use('/api', proxy('http://www.example.com'));
总结

同源策略是浏览器的一项安全机制,主要是为了保证用户的信息安全。如果不遵守同源策略,可能会引起一些安全问题,例如Cookie被盗取等情况。

所以在开发和测试过程中,必须注重同源策略问题,将相应的跨域问题解决掉,保证用户的信息安全。