HTTP请求如何实现跨域以及如何办理碰到的安全问题

打印 上一主题 下一主题

主题 825|帖子 825|积分 2475

各人好,我是 V 哥,HTTP 请求实现跨域,会出现安全问题,下面来聊一聊这个问题。
  HTTP 请求实现跨域

一、跨域的概念
跨域是指浏览器从一个域名的网页去请求另一个域名的资源时,由于同源策略的限制而出现的安全机制。同源策略要求协议、域名、端口完全雷同,只要有一个不同,就会产生跨域问题。
二、实现 HTTP 请求跨域的常见方法

  • CORS(跨域资源共享)

    • 服务器端设置:在服务器端设置相应头,答应指定的源进行跨域访问。

  1.     Access-Control-Allow-Origin: <origin>
  2.     Access-Control-Allow-Methods: <method>[, <method>]*
  3.     Access-Control-Allow-Headers: <header>[, <header>]*
复制代码


  • 例如,如果希望答应来自 http://example.com 的请求,可以设置 Access-Control-Allow-Origin: http://example.com。对于允很多种请求方法,可以利用 Access-Control-Allow-Methods: GET, POST, PUT。对于答应的自界说请求头,可以设置 Access-Control-Allow-Headers: Authorization, Content-Type。
  • 对于预检请求(OPTIONS 请求),服务器需要正确相应并包含相应的答应信息,如上述设置,以便浏览器判断是否答应后续的现实请求(如 POST、PUT 等)。

  • JSONP(JSON with Padding)


  • 原理:利用 <script> 标签不受同源策略限制的特性,通过动态创建 <script> 标签并插入到 HTML 中,请求一个 JSON 数据。
  1.     <script>
  2.         function handleData(data) {
  3.             // 处理获取到的数据
  4.             console.log(data);
  5.         }
  6.     </script>
  7.     <script src="http://example.com/data?callback=handleData"></script>
复制代码


  • 服务器端会将数据包裹在回调函数中返回,如 handleData({ "key": "value" });。
  • 缺点:只能处置惩罚 GET 请求,而且由于是利用 <script> 标签,存在一定的安全风险,例如可能受到 XSS 攻击。

  • 代理服务器


  • 思绪:在同源的服务器上设置一个代理接口,让前端请求先到达同源服务器,然后由同源服务器转发请求到目标服务器,再将结果返回给前端。
  • 实现方式:
    可以利用 Node.js 的 http-proxy-middleware 等中间件。
  1.         const express = require('express');
  2.         const { createProxyMiddleware } = require('http-proxy-middleware');
  3.         const app = express();
  4.         app.use('/api', createProxyMiddleware({ target: 'http://example.com', changeOrigin: true }));
  5.         app.listen(3000);
复制代码
表明:上述 Node.js 代码利用 Express 框架,当请求 /api 路径时,利用 createProxyMiddleware 中间件将请求转发到 http://example.com,changeOrigin 参数会修改请求头中的 Origin 字段,模拟同源请求。

  • WebSocket


  • 原理:WebSocket 是一种全双工通信协议,其毗连不受同源策略限制。
  1.     const socket = new WebSocket('ws://weige.com/socket');
  2.     socket.onopen = function() {
  3.         console.log('Connection opened');
  4.     };
  5.     socket.onmessage = function(event) {
  6.         console.log('Message from server ', event.data);
  7.     };
复制代码


  • 表明:通过创建 WebSocket 毗连到 ws://weige.com/socket,可以进行双向通信。onopen 事件在毗连建立时触发,onmessage 事件在收到服务器消息时触发。
三、注意事项


  • CORS 是最常用和推荐的方式,但需要服务器端的支持。
  • JSONP 虽然简朴,但功能有限且有安全隐患,仅适用于简朴的 GET 请求。
  • 代理服务器需要额外的服务器资源,而且可能会增加网络延迟。
  • WebSocket 适合长毗连和及时通信场景,但需要服务器和客户端都支持 WebSocket 协议。
跨域请求中可能会碰到哪些安全问题

一、跨域请求中的常见安全问题

  • CSRF(跨站请求伪造)

    • 原理:攻击者诱导用户在已登录的状态下访问恶意网站,该恶意网站会主动发起对目标网站的跨域请求,利用用户的登录凭证(如 Cookie)来实行非用户本意的操纵。
    • 示例:假设用户已经登录了银行网站,恶意网站可能包含一个隐蔽的表单,主动提交到银行的转账页面,从而导致用户在不知情的情况下转账。

  • XSS(跨站脚本攻击)

    • 原理:当利用 JSONP 等跨域技术时,如果没有对返回的数据进行严格的过滤,攻击者可能会插入恶意脚本。
    • 示例:在 JSONP 中,如果服务器返回的数据包含 <script>alert('XSS');</script>,而前端直接将其作为脚本实行,会导致 XSS 攻击。

  • 信息走漏

    • 情况:如果跨域请求中包含敏感信息,而没有适当的加密和安全机制,可能会导致信息在传输过程中被拦截和走漏。
    • 例如:利用 HTTP 而不是 HTTPS 进行跨域请求,数据在网络上以明文传输,容易被第三方窃取。

二、防范措施

  • 针对 CSRF 的防范

    • 利用 CSRF 令牌:服务器在页面中生成并存储一个 CSRF 令牌,在表单提交或 AJAX 请求时,要求携带该令牌,服务器验证令牌的有用性。

  1.     <form action="/transfer" method="post">
  2.         <input type="hidden" name="csrf_token" value="random_token_here">
  3.         <input type="text" name="amount" value="100">
  4.         <input type="submit" value="Transfer">
  5.     </form>
复制代码


  • 表明:在表单中添加一个隐蔽的 csrf_token 输入,该令牌是服务器端生成的随机字符串,每次请求时服务器会查抄令牌是否匹配。

  • 针对 XSS 的防范


  • 对返回的数据进行编码:在利用 JSONP 或其他跨域请求获取数据后,对数据进行 HTML 编码,克制直接实行脚本。
  1.     function safeHTML(str) {
  2.         return str.replace(/&/g, "&amp;")
  3.                 .replace(/</g, "&lt;")
  4.                 .replace(/>/g, "&gt;")
  5.                 .replace(/"/g, "&quot;")
  6.                 .replace(/'/g, "&#039;");
  7.     }
复制代码


  • 表明:上述 JavaScript 代码对字符串中的特殊字符进行了转义,将 & 转为 &,< 转为 < 等,这样即使包含恶意脚本,也不会被实行。

  • 信息安全


  • 利用 HTTPS:确保跨域请求利用 HTTPS 协议,对数据进行加密传输,防止信息走漏。
  • 限制跨域访问:利用 CORS 时,严格控制 Access-Control-Allow-Origin 的值,只答应信托的源进行跨域访问,克制不必要的源访问敏感信息。
总结



  • 跨域请求会带来多种安全问题,需要从不同角度进行防范。
  • CSRF 重要是利用用户的登录状态进行恶意操纵,通过 CSRF 令牌可以有用防范。
  • XSS 多发生在未对数据进行处置惩罚的情况下,编码数据是关键的防护手段。
  • 对于信息安全,要确保利用安全的传输协议并严格控制跨域访问权限。
关注威哥爱编程,全栈开辟你最猛。兄弟,都看到这了,点个小关小注呗,你的支持是V 哥最大的写作动力。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王海鱼

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表