帝国 CMS 在 Nginx 配置 nosniff 后,内容页无法正常显示实时点击数的问题及解决方法

帝国 CMS,ViewClick Content-Type 是正确的text/javascript ,如果在 Nginx 配置文件上,加上add_header X-Content-Type-Options "nosniff" always; 就网页前端就无法通过 <script src=[!--news.url--]e/public/ViewClick/?classid=[!--classid--]&id=[!--id--]&addclick=1></script> 正常显示实时点击数。

排查发现帝国 CMS 的 ViewClick 返回 Content-Type 不是 text/javascript。之前浏览器靠 MIME sniffing 自动嗅探纠正,加了 nosniff 后嗅探被禁,就直接拒绝执行了。

帝国 CMS 不同版本/配置下,ViewClick.php 有的显式输出 header("Content-Type: text/javascript") ,有的靠 PHP 默认值(默认是text/html; charset=UTF-8 )。

修复方案:

补 PHP 的 Content-Type 头

找到帝国 CMS 的 ViewClick 入口文件(/e/public/ViewClick/index.php 或 /e/public/ViewClick.php ),在文件最开头(任何输出之前)加一行:

header("Content-Type: text/javascript; charset=utf-8");

然后原来输出数字的代码类似:

echo "document.write('" . $count . "');";

OK,这样 Content-Type 就正确了,nosniff 也不会再拦。 同时保住了 nosniff 的防嗅探安全作用(防止其他资源被浏览器误判成可执行脚本)。

发表评论

行为验证™ 安全组件加载中...

评论 暂无评论

文章目录