文章851
标签121
分类10

解决 Cloudflare 导致的 CORS 跨域问题

在现代 Web 开发中,跨源资源共享(CORS)是一个常见的问题,尤其是当使用 Cloudflare 作为 CDN 时。本文将分享如何通过 Nginx 配置和 Cloudflare 策略解决 CORS 跨域问题的经验。

CORS 问题的背景

CORS 是一种安全特性,防止恶意网站访问用户在其他网站上的数据。在某些情况下,使用 Cloudflare 会导致 CORS 策略的冲突,即使服务器已经正确配置了相关响应头。

Nginx 配置

在 Nginx 中,我们可以通过设置响应头来解决 CORS 问题。以下是我在 Nginx 配置中使用的示例:

location / {
    proxy_pass http://xxxxxx;
    # 处理预检请求
    add_header 'Access-Control-Allow-Origin' "http_origin";
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, Accept, Origin, User-Agent, DNT, Cache-Control, X-Mx-ReqToken';
    add_header 'Content-Length' 0;
    add_header 'Content-Type' 'text/plain; charset=UTF-8';
    return 206;
}

# 允许所有来源的跨域请求
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type, Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length, Content-Range';

关键配置说明

  • Access-Control-Allow-Origin: 允许的来源,确保正确配置以防止多个值。
  • Access-Control-Allow-Credentials: 设置为 true,允许客户端发送凭据(如 cookies)。
  • Access-Control-Allow-Methods: 指定支持的 HTTP 方法。
  • Access-Control-Allow-Headers: 指定允许的请求头。

Cloudflare 策略的影响

尽管 Nginx 已经配置正确,CORS 问题仍然存在。这时候需要检查 Cloudflare 的设置。通过调整 Cloudflare 的策略,我最终解决了问题。以下是相关的设置步骤:

修改 Cloudflare 设置

  1. 登录 Cloudflare 控制面板。
  2. 找到你的域名,并进入“防火墙”或“页面规则”设置。
  3. 确保没有阻止 CORS 的规则,并允许 Access-Control-Allow-Credentials

2024-11-01T01:24:52.png

响应头对比

在修改 Cloudflare 策略之前和之后,我对比了两次的响应头。以下是主要差异,特别是在 Access-Control-Allow-Credentials 参数的开放状态。
在修改之后,Access-Control-Allow-Credentials 的值变为 true,这解决了跨域问题。
响应头差异如下图:
2024-11-01T01:26:31.png

实际上 Nginx 是有传的 Access-Control-Allow-Credentials 参数的, 但受 Cloudflare规则影响参数给客户端过滤掉了.

结论通过正确配置 Nginx 和调整 Cloudflare 策略,可以有效解决 CORS跨域问题。确保所有的响应头设置准确且无重复,同时仔细检查 CDN 的影响。

web目录扫描工具汇总

01 Gobuster

Gobuster 是一个开源工具,主要用于网站目录扫描和子域名收集。安装也很简单,只需执行下面命令即可!

apt-get install gobuster

2024-10-30T13:11:10.png

使用参数:

  • -u : –url 网站的域名或者IP
  • -w : 用户自定义字典
  • -x : 自定义文件类型如php jsp
gobuster dir -u http://192.168.0.106/bolt/ -w /usr/share/wordlists/dirb/big.txt -x php

2024-10-30T13:13:14.png

02 DIRB

DIRB 是一个 Web 内容扫描器。
它是 kali linux 内置的工具,通过对 Web 服务器发起基于字典的攻击并分析响应来工作,但请记住它是内容扫描器而不是漏洞扫描器。

使用也很简单,在DIRB后面直接加目标域名即可。

dirb https://bbskali.cn

2024-10-30T13:09:45.png

03 dirsearch

Dirsearch 是一个用 Python 编写的暴力扫描工具,用于查找隐藏的 Web 目录和文件。它可以在 Windows、Linux 和 macOS 上运行,而且终端界面配色也比较漂亮。

安装

dirsearch在kali中默认没有安装,我们只需执行下面命令进行安装。

apt-get install dirsearch

使用

dirsearch -u https://bbskali.cn

2024-10-30T13:14:39.png

Wfuzz

Wfuzz 在 Kali Linux内置的,因此我们可以通过在终端上键入wfuzz来启动它。

参数 :

  • -u : 目标网址
  • -w : 单词表
wfuzz -u https://bbskali.cn -w /usr/share/dirb/wordlists/common.txt --hc 400,404,403

2024-10-30T13:16:03.png

04 Metasploit

利用metasploit 框架,我们也可以对网站目录进行扫描。

use auxiliary/scanner/http/dir_scanner
set rhosts bbskali.cn
set path secnhack/
set dictionary /usr/share/dirb/wordlists/common.txt
run

2024-10-30T13:17:50.png

05 DirBuster

DirBuster 是kali自带的一款图形化工具。终端执行命令在其中提交目标详细信息,如下所示。

2024-10-30T13:18:54.png
效果如下:

2024-10-30T13:19:32.png

版权属于:逍遥子大表哥

本文链接:https://cloud.tencent.com/developer/article/2115753

按照知识共享署名-非商业性使用 4.0 国际协议进行许可,转载引用文章应遵循相同协议。

Ai 写代码工具

2024-10-30T11:56:58.png

AI 编程助手的推荐工具

在现代编程中,AI 编程助手已经成为开发者的重要伙伴。这些工具不仅能提高代码编写的效率,还能帮助开发者更好地理解和应用各种编程语言。本文将对一些流行的 AI 编程助手进行介绍,并分享推荐意见。

1. Kite

Kite 是一个强大的编程助手,提供了智能代码补全功能。它支持多种编程语言,并通过分析代码上下文来提供实时建议。Kite 提供了免费版本,同时也有更高级的付费功能,适合不同需求的开发者。

2. TabNine

TabNine 是一个基于深度学习的代码补全工具,能够显著提高编码速度。它支持多种开发环境,并且性能表现良好。TabNine 也有免费版本,适合追求高效编码的开发者。

3. GitHub Copilot

GitHub Copilot 是由 GitHub 和 OpenAI 合作开发的编程助手,虽然目前是付费工具,但它为学生和开源项目维护者提供了免费使用的机会。Copilot 能生成上下文相关的代码片段,极大地提升了开发效率。

4. CodeSuggester

CodeSuggester 是一个基于 AI 的代码建议工具,专注于提供实时的代码建议。目前该工具是免费的,对于需要快速获取代码片段和建议的开发者非常实用。

5. AI Code

AI Code 是一个 AI 驱动的代码生成器,能够根据用户的需求生成代码。它提供了一定的免费额度,适合想要尝试 AI 编码生成的开发者。

6. IntelliCode

IntelliCode 是微软为 Visual Studio 和 Visual Studio Code 提供的代码补全工具,完全免费。它通过学习开发者的编码习惯,提供个性化的代码建议,提升编程体验。

7. Codota

Codota 提供了代码补全和示例代码的功能,帮助开发者快速找到所需的代码片段。它有免费版本,也提供更高级的付费选项,适合各种开发需求。

我的推荐

在众多 AI 编程助手中,GitHub CopilotKite 是我个人比较推荐的工具。Copilot 能够生成高质量的代码片段,尤其适合愿意投资的开发者。而 Kite 的免费版本也非常实用,适合刚入门和想要提升编码效率的开发者。

如果预算有限,可以考虑使用 IntelliCodeTabNine,这两个工具在功能上也能满足大部分开发需求。

Arch Linux 为何如此迷人?

2024-10-30T11:55:42.png
Arch Linux 是众多 Linux 操作系统中的一种,面向有 Linux 指令操作经验的「进阶用户」,旨在打造更适合自己的环境,例如不同的桌面、窗口环境等,体验最新的软件包。

1. 纯文本界面,完全自定义

Arch Linux 只有文本界面,不包含图形界面。这意味着,当你安装完 Arch Linux 后,屏幕上将一片黑暗,电脑期待着你用键盘输入命令。Arch Linux 只提供最基本的功能,其他软件包都需要自己安装。

2. 成为掌握一切的设计师

Arch Linux 不会自动安装你用不到的东西,你将亲自打造完全属于自己的电脑。不会有程序自动启动,也不会强迫你进行更新。你可以将你的电脑改造成任何样子,同时你也为电脑的易用性和安全性负责。

3. 集全天下知识的维基

既然要自己打造电脑,当然需要大量知识。Arch Linux 培养了活跃的社区,撰写了几乎全世界最完整的 Linux 知识。想要安装什么软件,可以去 Arch Linux Wiki 查找详细的安装说明与疑难解答。Arch Linux Forums 更是活跃,各种琐碎问题都有近期的回应。在搜索引擎中搜索 “arch” 加上相关内容,通常都能找到答案,甚至其他 Linux 发行版也可以参考。

4. 全宇宙最新的软件包库

要打造理想的电脑,就需要最新的材料!Arch Linux 的包管理器 pacman 是所有 Linux 发行版中更新最快的,新版本的软件通常第一时间出现在 Arch Linux 上。如果官方库中没有你需要的软件,可以在 AUR(Arch Linux User Repository)用 yaourt 安装,体现了海纳百川的姿态。Arch Linux 没有版本之分,采用滚动更新(Rolling Release),所有软件包各自更新,也就是说你永远无需进行系统更新、被迫重启,之后又不能使用电脑。不过,缺点是当软件包发生冲突时,你需要亲自解决。

5. 开始你的 Arch Linux 之旅

想尝试 Arch Linux 的用户通常都比较挑剔,建议先查看官方 Wiki 的 Arch Linux 介绍,了解其信仰精神。如果决定安装,务必认真按照 Installation Guide 进行操作,预留几小时来理解这些内容,肯定会收获颇丰。

frp内网穿透工具

2024-10-29T07:28:11.png

frp内网穿透工具是一款三方开源工具,具体使用方式请参考frp Github。
本文档提供基础的frp使用步骤仅供参考,可网络搜索frp内网穿透工具配置教程。

准备工作

  • 需要准备一台公网服务器。
  • 需要有域名并已经正常解析到公网服务器。

什么是frp

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

步骤一:服务端安装

1. 执行以下命令,下载frp工具压缩包。

wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz

2. 执行以下命令,解压frp工具包。

tar -xvf frp_0.38.0_linux_amd64.tar.gz 

3.执行以下命令,移动至/usr/local。

mkdir /usr/local/frp
mv frp_0.38.0_linux_amd64/* /usr/local/frp/

4. (可选)删除frpc.ini和frpc文件,frpc相关的文件属于客户端配置。

步骤二:服务端配置

1. 执行以下命令进入frp文件夹。

cd /usr/local/frp

2. 执行以下命令编辑frps服务端配置文件。

vi frps.ini

3. frps服务端配置文件内写入以下信息。

[common] #必须设置
bind_port = 7000 #frp服务端端口,默认7000
vhost_http_port = 80 #自定义设置的http访问端口

[ssh] #ssh反向代理(不是必须设置)
listen_port = 6000 #设定的ssh访问端口

[web] 
type = http #为服务类型,可以设为http,https
custom_domains = frps.com #为要映射的域名,记得域名的A记录要解析到外网主机的IP。

4. 执行以下命令启动frps。

./frps -c ./frps.ini

步骤三:客户端安装

1. 执行以下命令,下载frp工具压缩包。

wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz

2. 执行以下命令,解压frp工具包。

tar -xvf frp_0.38.0_linux_amd64.tar.gz 

3. 执行以下命令,根据自己的偏好,移动至目标文件夹。

mkdir /usr/local/frp
mv frp_0.38.0_linux_amd64/* /usr/local/frp/

4. (可选)删除frps.ini和frps文件,frps相关的文件属于服务端配置。

步骤四:客户端配置

1. 执行以下命令进入frp文件夹。

cd /usr/local/frp

2. 执行以下命令编辑frpc客户端配置文件。

vi frpc.ini

3. frpc客户端配置文件内写入以下信息。

[common]
server_addr = x.x.x.x    # frps所在主机的IP
server_port = 7000       # frps与frpc客户端通信的端口

[web-compute1]           # 内网多台web服务器,此名称不能重复
type = http              # 通信协议类型   
local_port = 8000        # 本地开放的web端口
subdomain = compute1     # 子域名

4. 执行以下命令启动frpc。

./frpc -c ./frpc.ini
说明 : 经过上述步骤,即可通过compute1.frps.com:8080访问到内网的web服务。
">