前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP跨站脚本攻击(XSS)漏洞修复思路(二)

PHP跨站脚本攻击(XSS)漏洞修复思路(二)

作者头像
张戈
发布2018-03-23 14:37:40
1.5K0
发布2018-03-23 14:37:40
举报
文章被收录于专栏:张戈的专栏张戈的专栏

上一篇文章《PHP 跨站脚本攻击(XSS)漏洞修复方法(一)》写到了 360 修复 XSS 漏洞的插件并不完善的问题,那么这篇文章就来分享一下自己如何写代码修补这个漏洞。

从上一篇文章看出,部署了 360 出的 XSS 修复插件之后,至少还存在 iframe 无法过滤缺憾,是否还有其他纰漏目前还不得而知。

分析一下中国博客联盟和张戈博客已开放的数据入口:

①、中国博客联盟,主要有搜索、后台博客提交等; ②、张戈博客(WordPress),主要是用户评论提交;

所以,本文就已这 2 个入口为例子,来分享 XSS 漏洞修复的简单思路。

一、完全过滤

问题①,我可以找到站内搜索和博客提交这 2 个开放入口的数据处理 php,然后对数据过滤即可。

比如站内搜索,中国博客联盟取得搜索关键词是这样一行代码:

代码语言:javascript
复制
$keyword = addslashes(trim($_GET['query']));

考虑到中国博客联盟的站内搜索,只能搜索博客名称、域名、类型及描述这四种,而这四种均不需要出现 html 代码!如果有人提交搜索了 html 代码,绝非善意!

那对于这种情况,我只需要完全过滤掉 html 内容即可!所以可以用到 strip_tags()函数,具体运用如下:

代码语言:javascript
复制
$keyword = strip_tags(addslashes(trim($_GET['query'])));

在数据外套上 strip_tags 进行 html 完全过滤即可!那么系统后台得到的数据就是不含任何 html 代码的。

比如,依然搜索 360 爆出的“88888<iframe src=http://xxooxxoo.js>”:

PHP跨站脚本攻击(XSS)漏洞修复思路(二)
PHP跨站脚本攻击(XSS)漏洞修复思路(二)

从搜索结果可以看出,系统已自动过滤了后面的 iframe 恶意内容,问题得到解决。

因此,对于 XSS 漏洞的第一种修复方法就是使用 strip_tags 函数来完全过滤 html 内容。

二、代码转义

问题②,WordPress 的评论并不能如此暴力的过滤,因为很多用户确实是想提交一些 html 代码,来进行交流。

对于这种情况,有 3 种思路:

ajax 方式的评论都会用到主题下的 comment-ajax.php 文件,所以我们编辑这个文件,搜索$comment_type = '',然后在这行后面添加以下三种方法中,你所中意的代码:

A. 直接过滤,允许提交

代码语言:javascript
复制
if ( '' != $comment_content ) {
    /* $filter 是需要过滤的关键词,关键词之间用分隔符 | 隔开即可。 */
    $filter = '/<(iframe|script)/i';
    if (preg_match($filter,$comment_content,$matches)) {
        $comment_content = strip_tags($comment_content);
    }
}

效果截图:

PHP跨站脚本攻击(XSS)漏洞修复思路(二)
PHP跨站脚本攻击(XSS)漏洞修复思路(二)

B. 提出警告,禁止提交

代码语言:javascript
复制
if ( '' != $comment_content ) {
    /* $filter 是需要过滤的关键词,关键词之间用分隔符 | 隔开即可。 */
    $filter = '/<(iframe|script)/i';
    if (preg_match($filter,$comment_content,$matches)) {
        err( __('警告:评论含有危险内容,已被拦截,请在更正后重试。') ); 
    }
}

效果截图:

PHP跨站脚本攻击(XSS)漏洞修复思路(二)
PHP跨站脚本攻击(XSS)漏洞修复思路(二)

C. 内容转义,允许提交

代码语言:javascript
复制
if ( '' != $comment_content ) {
    /* $filter 是需要过滤的关键词,关键词之间用分隔符 | 隔开即可。 */
    $filter = '/<(iframe|script)/i';
    if (preg_match($filter,$comment_content,$matches)) {
    $comment_content = htmlspecialchars($comment_content).'<br />(<font color="red">系统提示:评论含危险内容,已被转义处理。</font>)';
 }
}

效果截图:

PHP跨站脚本攻击(XSS)漏洞修复思路(二)
PHP跨站脚本攻击(XSS)漏洞修复思路(二)

其中过滤列表只写了 iframe 和 script2 种,如果你需要过滤其他你不喜欢的内容,比如某些人评论总是带上链接,这些都是可以过滤的!反正方法我已经分享了,具体就看你自行发挥了!

Ps:其实 WordPress 本身已屏蔽了 XSS 漏洞,评论是不允许一些 html 代码的, 比如 font 字体标签等。本文也只是为了探讨修复 XSS 漏洞的一个简单思路,临时关闭了 HTML 过滤。为了安全起见,非特殊情况,还是不要禁止 WordPress 自带的 HTML 过滤为好!

最后,再去用 360 扫一扫,已经是“满意 100”了:

PHP跨站脚本攻击(XSS)漏洞修复思路(二)
PHP跨站脚本攻击(XSS)漏洞修复思路(二)

好了,关于 XSS 漏洞的简单修复思路的探讨,就暂告一段落,后续有新的见解再来补充完善。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年01月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分析一下中国博客联盟和张戈博客已开放的数据入口:
  • 一、完全过滤
  • 二、代码转义
    • 对于这种情况,有 3 种思路:
      • A. 直接过滤,允许提交
        • 效果截图:
          • B. 提出警告,禁止提交
            • 效果截图:
              • C. 内容转义,允许提交
                • 效果截图:
                相关产品与服务
                脆弱性检测服务
                脆弱性检测服务(Vulnerability detection Service,VDS)在理解客户实际需求的情况下,制定符合企业规模的漏洞扫描方案。通过漏洞扫描器对客户指定的计算机系统、网络组件、应用程序进行全面的漏洞检测服务,由腾讯云安全专家对扫描结果进行解读,为您提供专业的漏洞修复建议和指导服务,有效地降低企业资产安全风险。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档