查看: 361|回复: 8

[源码] Discuz!7.X严格限制引用的Flash地址解决方案

[复制链接]

2

主题

5

回帖

0

积分

热心网友

金币
5
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2008-7-12
发表于 2019-7-13 11:14:19 | 显示全部楼层 |阅读模式
经过测试Flash引用时存在过滤不严格的BUG,现给出以下修正方案:

        1、找到include\discuzcode.func.php文件
        2、在discuzcode函数中查找
  1. if($allowmediacode && strpos($msglower, '[/flash]') !== FALSE) {
  2.                         $message = preg_replace("/\[flash\]\s*([^\[\<\r\n]+?)\s*\[\/flash\]/is", "<script type="text/javascript" reload="1">document.write(AC_FL_RunContent('width', '550', 'height', '400', 'allowNetworking', 'internal', 'allowScriptAccess', 'never', 'src', '\\1', 'quality', 'high', 'bgcolor', '#ffffff', 'wmode', 'transparent', 'allowfullscreen', 'true'));</script>", $message);
  3.                 }
换行成
  1. if($allowmediacode && strpos($msglower, '[/flash]') !== FALSE) {
  2.                         $message = preg_replace("/\[flash\]\s*([^\[\<\r\n]+?)\s*\[\/flash\]/ies", "parseflash('\\1')", $message);
  3.                 }

3、在该文件中增加以下函数代码
  1. function parseflash($url) {
  2.         preg_match("/((https?){1}:\/\/|www\.)[^\["']+/i", $url, $matches);
  3.         $url = $matches[0];
  4.         $code = '';
  5.         if($url) {
  6.                 $code = "<script type="text/javascript" reload="1">document.write(AC_FL_RunContent('width', '550', 'height', '400', 'allowNetworking', 'internal', 'allowScriptAccess', 'never', 'src', '$url', 'quality', 'high', 'bgcolor', '#ffffff', 'wmode', 'transparent', 'allowfullscreen', 'true'));</script>";
  7.         }
  8.         return $code;
  9. }
修正后可以有效地限制引用的Flash地址

+======================================+
感谢“360第三方漏洞收集平台(http://webscan.360.cn/)”为本次修正提出安全建议
+======================================+


Flash, 修正, 严格, 限制, 用的
回复

使用道具 举报

6

主题

251

回帖

0

积分

热心网友

金币
251
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2008-6-19
发表于 2019-7-14 20:29:55 | 显示全部楼层
支持 辛苦了
回复

使用道具 举报

8

主题

29

回帖

0

积分

热心网友

金币
29
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2010-10-29
发表于 2019-7-17 21:48:34 | 显示全部楼层
只是7.X吗
回复

使用道具 举报

1

主题

22

回帖

0

积分

热心网友

金币
22
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2010-8-16
发表于 2022-9-6 21:11:51 | 显示全部楼层
这个可以。
回复

使用道具 举报

1

主题

22

回帖

0

积分

热心网友

金币
22
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2010-8-16
发表于 2023-2-25 20:28:09 | 显示全部楼层
感谢分享
回复

使用道具 举报

0

主题

24

回帖

0

积分

热心网友

金币
24
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2009-5-18
发表于 2023-2-25 20:35:23 | 显示全部楼层
感谢分享
回复

使用道具 举报

0

主题

2

回帖

0

积分

热心网友

金币
2
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2008-9-28
发表于 2023-3-29 18:08:12 | 显示全部楼层
感谢分享
回复

使用道具 举报

0

主题

2331

回帖

1万

积分

琼殿精英

金币
11777
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2011-10-11
发表于 2026-6-13 09:35:58 | 显示全部楼层
顶一个!感谢楼主的分享,这个Flash引用的安全问题确实很重要,之前看到过一些利用Flash地址进行挂马或者XSS攻击的案例,Discuz默认的过滤确实有些不够严格。

按照楼主的方案修改后,通过正则表达式来严格匹配URL格式,应该能有效阻止一些恶意代码的注入。特别是设置allowScriptAccess为never这一点,很好地限制了Flash的脚本执行权限。

另外也感谢360安全团队提供的建议,现在越来越多的开源程序都在关注安全问题,这对我们这些站长来说是好事。

mark一下备用,回头有空在自己的站点上也测试一下这个方案。支持技术分享!圆梦公社就需要这样热心的会员来充实内容。点击访问圆梦公社
回复

使用道具 举报

0

主题

67

回帖

84

积分

琼殿精英

金币
17
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2010-9-27
发表于 2026-8-30 18:11:36 | 显示全部楼层
支持技术分享!Discuz 7.x 的 Flash 解析确实容易被绕过,楼主这个方案从正则限制 URL 格式入手,再配合 allowScriptAccess 设为 never,能有效减少挂马和 XSS 的风险。建议其他站长动手前先备份
  1. include/discuzcode.func.php
复制代码
,改完记得清理缓存,然后分别测试正常 swf 链接和带伪协议的恶意地址,确认拦截效果。已收藏备用,感谢楼主和 360 安全团队的建议!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

圆梦公社,专注于为全球华人提供纯粹技术交流的地方,请勿发布任何政治及违法的言论。如有相关侵权、举报、投诉及建议等,请发 E-mail:dzh188@hotmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部