CORS跨域漏洞

  1. CORS跨域

(一)漏洞描述:

Web服务端CORS(跨域资源共享)错误配置,无法正确验证Origin头,任何网站都可以发出使用用户凭据发出的请求,并读取对这些请求的响应,信任任意来源可以有效地禁用同源策略,从而允许第三方网站进行双向交互,易导致敏感信息泄露。

(二)风险等级:

中危

(三)漏洞地址:

http://10.10.10.10:8080/#/login

(四)漏洞验证:

抓取上述漏洞地址的请求包,构造Origin字段,并将Origin头参数值设为恶意域名,服务端返回的Access-Control-Allow-Origin字段值为修改的恶意域名,判断服务端并未正确处理跨域请求

(五)修复方案:

(1)如果没有必要就不要开启CORS
(2)严格限制域白名单,而不是使用*
(3)尽量避免使用Access-Control-Allow-Credentials

实际修复nginx配置:

    server{
       listen 8080;
       server_name localhost;

       location / {
          root /test;
          index index.html index.htm;

          set $allow_cors 0;
          # 判断不为空
          if ($http_origin) {
          set $allow_cors 1;
          }
          # 判断不在白名单内
          if ($http_origin !~* "(10.10.10.10|www.abc.com|11.11.11.11)" ) {
          set $allow_cors "${allow_cors}1";
          }
          # 判断不为空 且 不在白名单内,返回403
          if ($allow_cors = "11") {
          return 403;
          }

       }
       location /api {
          proxy_pass http://10.123.123.123:1200/api;
          client_max_body_size 30m;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            set $allow_cors 0;
            # 判断不为空
            if ($http_origin) {
            set $allow_cors 1;
             }
            # 判断不在白名单内
            if ($http_origin !~* "(10.10.10.10|www.abc.com|11.11.11.11)" ) {
            set $allow_cors "${allow_cors}1";
             }
            # 判断不为空 且 不在白名单内,返回403
            if ($allow_cors = "11") {
            return 403;
           }

       }
       error_page 500 502 503 504 /50x.html;
       location = /50x.html {
          root html;
       }
    }

参考文档

<think>嗯,用户现在问的是“旋转矩阵程序”,我需要先弄清楚他们具体指的是什么。旋转矩阵在数学和计算机图形学中有不同的应用,可能涉及3D旋转、坐标变换,或者编程实现。用户可能是在学习图形学,或者在做机器人相关的项目,需要处理三维空间的旋转问题。 首先,得明确旋转矩阵的基本概念。旋转矩阵属于线性代数中的正交矩阵,用于描述三维空间中绕某个坐标轴的旋转。比如绕X轴、Y轴、Z轴旋转θ角后的坐标变换。这部分需要给出数学公式,用LaTeX的$$格式展示,因为用户之前的问题涉及矩阵,可能需要具体的公式参考。 接下来,用户可能需要编程实现的例子。常见的编程语言比如Python,使用NumPy库可以方便地创建旋转矩阵。这时候需要给出代码示例,但要注意用户是否熟悉编程,可能需要简要解释代码的结构,比如函数参数是角度,返回旋转矩阵,以及如何处理角度转换(弧度制)。 然后,考虑应用场景。比如计算机图形学中的物体旋转,机器人运动学中的关节旋转,或者游戏开发中的角色方向调整。这部分需要具体说明不同场景下旋转矩阵的作用,帮助用户理解实际应用。 另外,用户可能对旋转矩阵的复合旋转感兴趣,比如绕多个轴旋转时的顺序问题(欧拉角与万向节锁),或者四元数与旋转矩阵的转换。但考虑到用户的问题可能比较基础,先集中在单一轴的旋转矩阵实现,避免信息过载。 还需要注意旋转矩阵的特性,比如正交性、行列式为1,以及逆矩阵等于转置矩阵等,这些数学性质可能对用户验证实现的正确性有帮助,尤其是调试程序时检查矩阵是否正确。 用户可能遇到的常见问题包括角度单位(弧度与度数)的混淆,旋转方向(左手系与右手系)的不同,或者矩阵乘法的顺序错误。在解释时应提示这些注意事项,帮助用户避免典型错误。 最后,是否需要扩展到其他相关概念,比如旋转向量、四元数,或者三维变换中的平移和缩放?可能暂时不需要,除非用户进一步询问,但可以简要提及这些扩展作为补充知识,供用户参考。 总结下来,回答结构应该是:定义旋转矩阵,数学公式,编程实现示例(Python),应用场景,注意事项,以及可能的扩展。确保各部分用清晰的标题分隔,使用列表和代码块提高可读性,同时检查LaTeX公式的正确性,避免格式错误。</think>### 旋转矩阵程序详解 **旋转矩阵**是描述三维空间中物体绕坐标轴旋转的数学工具,广泛应用于计算机图形学、机器人学、游戏开发等领。以下从**数学原理**、**编程实现**和**应用场景**三个方面展开说明: --- #### 一、数学原理 旋转矩阵属于**正交矩阵**,满足 $R^T R = I$ 且 $\det(R) = 1$。其核心形式如下(角度单位为弧度): 1. **绕X轴旋转θ角**: $$ R_x(\theta) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\theta & -\sin\theta \\ 0 & \sin\theta & \cos\theta \end{bmatrix} $$ 2. **绕Y轴旋转θ角**: $$ R_y(\theta) = \begin{bmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{bmatrix} $$ 3. **绕Z轴旋转θ角**: $$ R_z(\theta) = \begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix} $$ --- #### 二、编程实现(Python示例) 以下代码演示如何生成绕Z轴的旋转矩阵,并验证其正交性: ```python import numpy as np def rotation_matrix_z(theta): """生成绕Z轴的旋转矩阵""" theta_rad = np.radians(theta) # 角度转弧度 cos_theta = np.cos(theta_rad) sin_theta = np.sin(theta_rad) return np.array([ [cos_theta, -sin_theta, 0], [sin_theta, cos_theta, 0], [0, 0, 1] ]) # 示例:绕Z轴旋转90度 R = rotation_matrix_z(90) print("旋转矩阵R_z(90°):\n", R) # 验证正交性:R^T * R 应接近单位矩阵 ortho_check = np.dot(R.T, R) print("\n正交性验证 (R^T * R):\n", np.round(ortho_check, 6)) ``` **输出结果**: ``` 旋转矩阵R_z(90°): [[ 6.123234e-17 -1.000000e+00 0.000000e+00] [ 1.000000e+00 6.123234e-17 0.000000e+00] [ 0.000000e+00 0.000000e+00 1.000000e+00]] 正交性验证 (R^T * R): [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] ``` --- #### 三、应用场景 1. **计算机图形学** - 3D模型旋转:通过矩阵乘法实现顶点坐标变换。 - 示例:将立方体绕Y轴旋转30度后渲染。 2. **机器人运动学** - 机械臂关节姿态计算:串联多个旋转矩阵描述末端执行器位置。 - 示例:六轴机械臂的逆运动学求解。 3. **游戏开发** - 角色/摄像机方向控制:结合平移矩阵实现复杂运动。 - 示例:第一人称视角游戏中鼠标控制视角旋转。 --- #### 四、注意事项 1. **旋转顺序影响结果** 复合旋转需明确顺序(如XYZ vs ZYX),不同顺序可能导致“万向节锁”问题。 2. **左手系 vs 右手系** 坐标系定义不同会导致旋转方向相反(需统一标准)。 3. **性能优化** 高频调用时建议预计算矩阵或使用四元数(更高效插值)。 --- #### 扩展知识 - **四元数**:避免万向节锁的替代方案,适合平滑插值(如SLERP)。 - **齐次坐标**:将旋转与平移统一为4x4矩阵,简化三维变换组合。 如果需要进一步探讨特定领(如机器人逆运动学中的矩阵应用),请提供具体场景!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小邋遢2.0

你的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值