php防止跨脚本攻击,PHP防止XSS跨站脚本攻击修复方法的2种方法

本文通过WordPress留言示例解释了XSS跨站脚本攻击的危害,展示了如何利用XSS漏洞进行恶意操作。修复方案包括使用HTML内容过滤函数和360提供的修复插件,并提供了具体的操作步骤。此外,还探讨了针对不同情况的过滤和转义方法,以防止XSS漏洞。
摘要由CSDN通过智能技术生成

什么叫XSS跨站攻击漏洞?专业理论性的解释我也懒得说,自己去百度。我就举个实际的例子来说明这玩意的危害好了!

就拿之前WordPress留言来举例好了。

默认状态下,WordPress是不允许带颜色评论的,但是我们可以通过在functions.php里面插入这2行代码,强行允许评论开放所有HTML代码:// 允许评论开放所有html代码

remove_action('init', 'kses_init');

remove_action('set_current_user', 'kses_init');

这样修改之后,WordPress确实可以留言带颜色了,比如红色

但是,XSS漏洞也随机而来!最简单的演示就是在博客如下带上代码留言:

我来测试以下XSS漏洞啦啦啦啦

留言生效后,页面一加载就会自动跳到百度首页了!

这只是XSS漏洞的一个最简单的攻击例子之一而已,上次中国博客联盟就被一个小人挂过一次黑链!看了上面的例子,你应该很猜出是怎么挂的了吧?他注册了中国博客联盟的会员,然后在提交博客时额外提交了一段js代码,后台审核时,这个js就会操作我的数据库,在首页加入对方的友链。

这种SQL注入就更加危险了!所以,如果你的网站有XSS漏洞,最好还是修复一下,避免被小人利用!

三、修复方案

好了,下面说一下简单修复方法。

先来看下360给出的修复方案:

方案一:避免XSS的方法之一主要是将用户所提供的内容输入输出进行过滤,许多语言都有提供对HTML的过滤:

可以利用下面这些函数对出现xss漏洞的参数进行过滤

PHP的htmlentities()或是htmlspecialchars()。

Python 的 cgi.escape()。

ASP 的 Server.HTMLEncode()。

ASP.NET 的 Server.HtmlEncode() 或功能更强的 Microsoft Anti-Cross Site Scripting Library

Java 的 xssprotect(Open Source Library)。

Node.js 的 node-validator。

方案二:使用开源的漏洞修复插件。( 需要站长懂得编程并且能够修改服务器代码 )

具体可以参考:http://webscan.360.cn/group/topic/tid/4571

之前小武就提到过,可以写代码过滤。能写代码当然好,但是自己写代码不但很麻烦,而且一个人能想到的正则过滤也可能会存在漏掉的风险,毕竟一个人考虑问题总是不会那么的全面和完善。既然360安全团队已经推出了修复插件,那不妨先试试。

我下载并部署了360写的PHP插件,感觉不错!而且WordPress颜色代码又可以安全的打开了,现在来分享一下,建议所有PHP网站都部署一下,有备无患!

四、部署方法

①、下载插件

360提供的是专站专用的插件,插件代码会有和网站对应的KEY,所以下载前请修改下面的域名部分:http://webscan.360.cn/protect/down?domain=yourdomain.com

将上面下载地址中的yourdomain.com改为你的域名,然后浏览器访问即可下载专用插件:

②、上传插件

解压后,得到360safe文件夹,并上传至服务器根目录:

b18ea569a90df05047ccf961b591e1b8.png

③、部署插件

按照360的部署教程,是要在网站的一个公用文件(如数据库的连接文件)中加入代码:if(is_file($_SERVER['DOCUMENT_ROOT'].'/360safe/360webscan.php')){

require_once($_SERVER['DOCUMENT_ROOT'].'/360safe/360webscan.php');

} //注意文件路径

所以,WordPress网站可以选择添加到网站根目录下的index.php或数据库连接文件wp-config.php当中:

但是,玩WordPress的朋友都知道,这玩意更新频繁,每次版本更新,index.php这个文件十有八九是会替换的!所以最靠谱的方法是将以上代码添加到wp-config.php文件的第一个<?php 之后:

713bafca4b3c963a7e26f8ca43de059e.png

而且,任意建站程序都建议加到数据库连接文件当中,可谓一夫当关,万夫莫开!

五、最后验证

部署完插件了,咱们就来试试效果吧!

①、最简单的验证方法

直接在WordPress原生搜索带XSS特性的代码,比如搜索:alert(123);

就会出现如下拦截页面:

b61ac9c3a1952830afef569ea994a86e.png

②、带XSS攻击特征留言验证

依然和本文开头提到的那样,来测试留言:

我来测试以下XSS漏洞啦啦啦啦

结果显然可以猜到:

1440767761653039.png

更令人欣慰的是,带颜色是可以评论的:

ce89a87911e63bc7e5e0e343b5722ba5.png

第二种解决办法:

一、完全过滤

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

比如站内搜索,中国博客联盟取得搜索关键词是这样一行代码:$keyword = addslashes(trim($_GET['query']));

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

那对于这种情况,我只需要完全过滤掉html内容即可!所以可以用到strip_tags()函数,具体运用如下:$keyword = strip_tags(addslashes(trim($_GET['query'])));

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

比如,依然搜索360爆出的“88888”:

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

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

二、代码转义

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

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

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

A. 直接过滤,允许提交if ( '' != $comment_content ) {

/* $filter 是需要过滤的关键词,关键词之间用分隔符 | 隔开即可。 */

$filter = '/

if (preg_match($filter,$comment_content,$matches)) {

$comment_content = strip_tags($comment_content);

}

}

B. 提出警告,禁止提交if ( '' != $comment_content ) {

/* $filter 是需要过滤的关键词,关键词之间用分隔符 | 隔开即可。 */

$filter = '/

if (preg_match($filter,$comment_content,$matches)) {

err( __('警告:评论含有危险内容,已被拦截,请在更正后重试。') );

}

}

C. 内容转义,允许提交if ( '' != $comment_content ) {

/* $filter 是需要过滤的关键词,关键词之间用分隔符 | 隔开即可。 */

$filter = '/

if (preg_match($filter,$comment_content,$matches)) {

$comment_content = htmlspecialchars($comment_content).'
(系统提示:评论含危险内容,已被转义处理。)';

}

}

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值