深入 GifHub 源码:Chrome 扩展如何绕过 CSP 调用 Giphy API 搜索 GIF

发布时间:2026/8/20 20:39:35

深入 GifHub 源码:Chrome 扩展如何绕过 CSP 调用 Giphy API 搜索 GIF
深入 GifHub 源码Chrome 扩展如何绕过 CSP 调用 Giphy API 搜索 GIF【免费下载链接】GifHubQuickly insert GIFs in GitHub comments项目地址: https://gitcode.com/gh_mirrors/gi/GifHubGifHub 是一个能在 GitHub 评论中快速搜索并插入 GIF 的 Chrome 扩展很多开发者好奇它调用 Giphy API 搜索 GIF 时为什么要把网络请求绕到后台页面去执行答案就藏在CSP内容安全策略里。本文带你深入 GifHub 源码一步步拆解它绕过 CSP 完成一次 GIF 搜索的完整链路即使你不熟悉扩展开发也能看懂其中的设计巧思。GifHub 是什么GitHub 评论里的 GIF 搜索小助手GifHub 的核心功能一句话就能说清在 GitHub 的评论工具条上加一个按钮点击后弹出 GIF 搜索面板输入关键词即可从 Giphy 海量图库中挑选 GIF 并一键插入评论。正如上图所示评论输入框上方多了一个 Add a GIF 按钮配合 giphy-widget.html 中定义的弹出面板整个交互流畅自然。它依赖 Giphy 官方 API搜索、预览、插入一气呵成是典型的小而美开源项目非常适合作为 Chrome 扩展开发的学习范本。为什么要绕过 CSPGitHub 页面的安全围栏做过前端的人都知道CSP是网站用来限制页面里能加载什么、能请求什么的安全机制。GitHub 对自己的页面设置了严格的 CSP其中一个重要限制就是页面脚本不能随意向第三方域名发起网络请求。这就带来一个矛盾GifHub 的搜索逻辑运行在 GitHub 页面里但它要调用的却是api.giphy.com的接口。如果直接在页面脚本里fetchGiphy API会被 GitHub 的 CSP 直接拦截报错、失败、功能失效。所以绕过 CSP 就成了这个扩展必须解决的第一道关卡。核心思路把 Giphy API 请求交给后台页面GifHub 源码给出的答案非常经典内容脚本Content Script负责界面交互后台页面Background Page负责发请求。为什么后台页面能绕过 CSP因为后台页面是扩展自己的独立环境不受目标网页 CSP 的约束只受扩展自身权限控制。只要在 manifest.json 里声明访问 Giphy API 的权限permissions: [ https://api.giphy.com/v1/* ]后台脚本就能名正言顺地请求 Giphy。看 background.js 中的核心代码请求逻辑干净利落——拼 URL、fetch、解析结果把每张 GIF 的原始图、压缩图地址和名称提取出来返回const apiBase https://api.giphy.com/v1; function giphySearch(searchTerm) { const uri ${apiBase}/gifs/search?q${encodeURIComponent(searchTerm)}api_key${apiKey}; return fetch(uri).then(res res.json())... }这个页面受限、后台放行的思路是解决扩展中跨域/CSP 问题的最常用手段。一次搜索的完整旅程GifHub 的请求链路从用户敲下关键词到 GIF 出现在面板里GifHub 走了一条三跳的请求链路每一跳都有清晰的职责分工页面脚本发消息用户输入关键词后events.js 中的startSearch通过window.postMessage把搜索请求发给内容脚本内容脚本转交后台inject.js 收到消息后调用chrome.runtime.sendMessage把请求交给后台页面后台请求 Giphy 并回传background.js 用chrome.runtime.onMessage监听请求完成 Giphy API 调用后把结果原路返回——先postMessage给页面脚本再由 events.js 的listenForGiphyResponse通知 UI 渲染。这里还有一个很妙的细节inject.js 通过runFnInPage把一段检测函数注入页面上下文用 GitHub 自己的feature-detection模块判断当前页面是不是 GitHub——借对方的特征来识别对方既精准又省心。图片也要过 CSPMarkdown 预览的巧妙复用有意思的是GifHub 不仅要请求绕过 CSP连展示也要绕。Giphy 返回的图片直链如果直接塞进评论GitHub 同样会因 CSP 拦截或代理问题无法渲染。GifHub 的解法很聪明不直接贴图片而是把 Markdown 文本交给 GitHub 自己的预览接口去渲染。在 api.js 的bypassCSPForImages中扩展把alt格式的 Markdown 发给 GitHub 的预览 API再从返回的 HTML 里提取经过 GitHub 官方代理处理过的图片地址——相当于借 GitHub 的手把图片洗白成合规链接。完整逻辑在 index.js 中串联搜索结果先过bypassCSPForImages处理再交给 widget 更新图片列表用户点击后由 utils.js 的toMarkdownImage生成最终 Markdown插入到评论光标处。关键配置manifest.json 权限声明整套机制能跑通离不开 manifest.json 的三处关键配置permissions声明对https://api.giphy.com/v1/*的访问权限这是后台请求 Giphy 的通行证web_accessible_resources把bundle.js和extension.css设为页面可访问资源否则内容脚本注入的脚本和样式会被页面拦截content_scripts声明注入范围与时机document_idle确保页面加载完成后才注入按钮逻辑。这三个字段几乎是所有要往别人页面里塞东西的扩展的标配。小结从 GifHub 源码学到的三点回到标题的问题——GifHub 如何绕过 CSP 调用 Giphy API 搜索 GIF一句话总结内容脚本负责 UI后台页面负责请求GitHub 预览接口负责图片洗白。从中可以提炼出三个可复用的经验后台页面是绕过 CSP 的万能钥匙凡是页面里被 CSP 拦住的请求优先考虑迁到扩展后台执行消息通道要分层页面 → 内容脚本 → 后台的三级通信让每层职责单一、易于排查善用目标站点自己的接口像 GifHub 借用 GitHub 预览 API 处理图片那样很多拦路虎其实可以借力打力。如果你正准备开发自己的 Chrome 扩展或对 CSP 与跨域问题感兴趣这个项目无疑是极佳的入门教材。动手把它 clone 下来在 background.js 和 inject.js 之间打断点走一遍你会对扩展的消息机制有更直观的体会。【免费下载链接】GifHubQuickly insert GIFs in GitHub comments项目地址: https://gitcode.com/gh_mirrors/gi/GifHub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Loose Leaf 从源码构建教程:3 步在你的 iPad 上运行开源笔记应用

Loose Leaf 从源码构建教程:3 步在你的 iPad 上运行开源笔记应用

2026/8/20 20:29:34

Loose Leaf 从源码构建教程:3 步在你的 iPad 上运行开源笔记应用 【免费下载链接】loose-leaf Intuitive note taking app. Import and annotate PDFs, manipulate imported photos with intuitive gestures, and take notes with Apple Pencil. 项目地址: https:…

从 ufold-npu 看昇腾 NPU 上的生物计算:RNA 结构预测的下一站

从 ufold-npu 看昇腾 NPU 上的生物计算:RNA 结构预测的下一站

2026/8/20 20:29:34

从 ufold-npu 看昇腾 NPU 上的生物计算:RNA 结构预测的下一站 【免费下载链接】ufold-npu 项目地址: https://ai.gitcode.com/atlasleong/ufold-npu ufold-npu 是一个把经典 RNA 结构预测模型 UFold 完整适配到华为昇腾 NPU 的开源交付项目。在昇腾 910B4 单卡上&#…

thal项目改造实战:打造属于你自己的GitHub用户信息采集器

thal项目改造实战:打造属于你自己的GitHub用户信息采集器

2026/8/20 20:29:34

thal项目改造实战:打造属于你自己的GitHub用户信息采集器 【免费下载链接】thal 项目地址: https://gitcode.com/gh_mirrors/tha/thal 如果你经常需要收集开源社区的开发者资料,一定想知道如何高效地采集GitHub用户信息。thal 正是一个基于 Pupp…

MediaBrowser 常见问题避坑指南:开发者最常踩的 8 个坑及解决方案

MediaBrowser 常见问题避坑指南:开发者最常踩的 8 个坑及解决方案

2026/8/20 21:39:40

MediaBrowser 常见问题避坑指南:开发者最常踩的 8 个坑及解决方案 【免费下载链接】MediaBrowser 🏞 A simple iOS photo and video browser with optional grid view, captions and selections written in Swift5.0 项目地址: https://gitcode.com/gh…

一文读懂 DirtyPipe(CVE-2022-0847):container-escape-check 检测逻辑与逃逸利用原理

一文读懂 DirtyPipe(CVE-2022-0847):container-escape-check 检测逻辑与逃逸利用原理

2026/8/20 21:39:40

一文读懂 DirtyPipe(CVE-2022-0847):container-escape-check 检测逻辑与逃逸利用原理 【免费下载链接】container-escape-check docker container escape check || Docker 容器逃逸检测 项目地址: https://gitcode.com/gh_mirrors/co/conta…

Rabel 安全机制详解:验证码、CanCanCan 权限控制与用户封禁

Rabel 安全机制详解:验证码、CanCanCan 权限控制与用户封禁

2026/8/20 21:39:40

Rabel 安全机制详解:验证码、CanCanCan 权限控制与用户封禁 【免费下载链接】rabel An open-source web forum built on the Ruby on Rails framework. 项目地址: https://gitcode.com/gh_mirrors/ra/rabel Rabel 是一款基于 Ruby on Rails 框架构建的开源社…

Faiss RaBitQ 量化全攻略:压缩 90% 内存的随机二进制量化,从原理到上线的避坑指南

Faiss RaBitQ 量化全攻略:压缩 90% 内存的随机二进制量化,从原理到上线的避坑指南

2026/8/20 21:39:40

Faiss RaBitQ 量化全攻略:压缩 90% 内存的随机二进制量化,从原理到上线的避坑指南 【免费下载链接】faiss A library for efficient similarity search and clustering of dense vectors. 项目地址: https://gitcode.com/GitHub_Trending/fa/faiss …

为什么选择DesktopAssistant:5个理由让Python语音助手成为你的桌面效率利器

为什么选择DesktopAssistant:5个理由让Python语音助手成为你的桌面效率利器

2026/8/20 21:39:40

为什么选择DesktopAssistant:5个理由让Python语音助手成为你的桌面效率利器 【免费下载链接】DesktopAssistant A Virtual Desktop Assistant Written in Python 项目地址: https://gitcode.com/gh_mirrors/des/DesktopAssistant 还在为每天重复点击浏览器、…

智能角色系统的部署配置核对

智能角色系统的部署配置核对

2026/8/20 21:29:40

智能角色系统的部署配置核对 这篇要解决什么 智能角色系统的部署配置核对讨论的是一个可复查的工程问题。智能角色系统的部署配置核对不拿未经记录的事故、跑分或成本当作论据;判断需要回到当前项目的输入、版本和运行条件。 从边界开始 处理智能角色系统的部署配置…

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

2026/8/19 3:36:59

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

2026/8/20 21:07:35

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

2026/8/19 8:02:16

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

微信聊天记录如何完整导出?WeChatMsg备份指南:HTML/Word/CSV一键转换

微信聊天记录如何完整导出?WeChatMsg备份指南:HTML/Word/CSV一键转换

2026/8/20 0:08:45

微信聊天记录如何完整导出?WeChatMsg备份指南:HTML/Word/CSV一键转换 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com…

B站缓存m4s打不开?m4s-converter无损合成MP4,实测1.46GB仅5秒

B站缓存m4s打不开?m4s-converter无损合成MP4,实测1.46GB仅5秒

2026/8/20 0:08:45

B站缓存m4s打不开?m4s-converter无损合成MP4,实测1.46GB仅5秒 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 判断你是否…

告别白模时代:Blender3mfFormat 让 3MF 导入导出一次跑通设计到打印

告别白模时代:Blender3mfFormat 让 3MF 导入导出一次跑通设计到打印

2026/8/20 0:08:45

告别白模时代:Blender3mfFormat 让 3MF 导入导出一次跑通设计到打印 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 按 3MF 官方规范的字面意思,一…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/17 12:00:53

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/15 10:10:27

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/18 12:20:24

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…