You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JS/jQuery或PHP隐藏iframe/embed标签的src属性?

解决方案:后端防护为主,前端增强为辅

首先明确:前端无法完全隐藏PDF的真实源URL——浏览器要加载PDF就必须获取真实地址,开发者工具总能抓到。要实现「禁止直接获取源URL,但允许下载」,核心得靠后端控制,前端仅能增加获取难度。


1. 后端代理PDF请求(核心方案)

不让前端直接接触真实文件路径,通过PHP接口转发PDF内容,前端看到的只是接口URL,真实文件地址完全在后端处理。

前端代码修改:

<?php
// 用加密算法生成文件标识(避免直接暴露文件名)
$secretKey = "你的加密密钥";
$iv = "16位初始化向量"; // AES-256-CBC需要16位IV
$fileIdentifier = openssl_encrypt($_GET['url'], "AES-256-CBC", $secretKey, 0, $iv);
?>

<embed id="renderedPrint" style="height:calc(100% - 4px);width:calc(100% - 4px);padding:0;margin:0;border:0;" 
       src="pdf-proxy.php?id=<?php echo urlencode($fileIdentifier); ?>">
</embed>

新建pdf-proxy.php代理文件:

<?php
$secretKey = "你的加密密钥";
$iv = "16位初始化向量"; // 和前端加密用的一致

// 解密获取真实文件名
$encryptedId = $_GET['id'];
$filename = openssl_decrypt(urldecode($encryptedId), "AES-256-CBC", $secretKey, 0, $iv);

// 安全校验:防止目录遍历攻击
$allowedDir = realpath("assets/labels/");
$filePath = realpath($allowedDir . "/" . $filename . ".pdf");
if (strpos($filePath, $allowedDir) !== 0) {
    die("无效请求");
}

// 设置响应头,允许浏览器内嵌预览+下载
header("Content-Type: application/pdf");
header("Content-Disposition: inline; filename=\"" . basename($filePath) . "\"");
header("Content-Length: " . filesize($filePath));

// 输出PDF内容
readfile($filePath);
exit;

关键说明:

  • 前端的src指向代理接口,真实文件路径不会暴露给用户;
  • 代理里可额外加权限校验(比如用户登录状态、访问次数限制);
  • 就算用户拿到接口URL,也无法直接获取到真实PDF路径。

2. 前端增强:增加获取难度(辅助手段)

仅靠前端无法阻止技术人员获取URL,但能拦掉大部分普通用户:

$(document).ready(function() {
    // 拆分路径片段,避免直接暴露完整字符串
    const pathParts = ["assets", "labels", "<?php echo $url; ?>", ".pdf"];
    // 简单混淆:字符反转后再恢复
    const mixed = pathParts.join('/').split('').reverse().join('');
    const realSrc = mixed.split('').reverse().join('');
    
    $("#renderedPrint").attr("src", realSrc);
});

3. 服务器配置:禁止直接访问PDF文件

配合代理方案,在服务器层面拦截直接访问PDF的请求,彻底封死真实路径的访问入口:

  • Nginx:在配置文件中添加
    location /assets/labels/ {
        deny all;
        return 403;
    }
    
  • Apache:在assets/labels/目录下新建.htaccess文件
    Order Deny,Allow
    Deny from all
    

内容的提问来源于stack exchange,提问作者Thowzif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:05:54