Laravel5中防止XSS跨站攻击的方法


Posted in PHP onOctober 10, 2016

本文实例讲述了Laravel5中防止XSS跨站攻击的方法。分享给大家供大家参考,具体如下:

Laravel 5本身没有这个能力来防止xss跨站攻击了,但是这它可以使用Purifier 扩展包集成 HTMLPurifier 防止 XSS 跨站攻击。

1、安装

HTMLPurifier 是基于 PHP 编写的富文本 HTML 过滤器,通常我们可以使用它来防止 XSS 跨站攻击,更多关于 HTMLPurifier的详情请参考其官网:http://htmlpurifier.org/。Purifier 是在 Laravel 5 中集成 HTMLPurifier 的扩展包,我们可以通过 Composer 来安装这个扩展包:

composer require mews/purifier

安装完成后,在配置文件config/app.php的providers中注册HTMLPurifier服务提供者:

'providers' => [
 // ...
 Mews\Purifier\PurifierServiceProvider::class,
]
然后在aliases中注册Purifier门面:
'aliases' => [
 // ...
 'Purifier' => Mews\Purifier\Facades\Purifier::class,
]

2、配置

要使用自定义的配置,发布配置文件到config目录:

php artisan vendor:publish

这样会在config目录下生成一个purifier.php文件:

return [
 'encoding' => 'UTF-8',
 'finalize' => true,
 'preload' => false,
 'cachePath' => null,
 'settings' => [
  'default' => [
   'HTML.Doctype'    => 'XHTML 1.0 Strict',
   'HTML.Allowed'    => 'div,b,strong,i,em,a[href|title],ul,ol,li,p[style],br,span[style],img[width|height|alt|src]',
   'CSS.AllowedProperties' => 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align',
   'AutoFormat.AutoParagraph' => true,
   'AutoFormat.RemoveEmpty' => true
  ],
  'test' => [
   'Attr.EnableID' => true
  ],
  "youtube" => [
   "HTML.SafeIframe" => 'true',
   "URI.SafeIframeRegexp" => "%^(http://|https://|//)(www.youtube.com/embed/|player.vimeo.com/video/)%",
  ],
 ],
];

3、使用示例

可以使用辅助函数clean:

clean(Input::get('inputname'));

或者使用Purifier门面提供的clean方法:

Purifier::clean(Input::get('inputname'));

还可以在应用中进行动态配置:

clean('This is my H1 title', 'titles');
clean('This is my H1 title', array('Attr.EnableID' => true));

或者你也可以使用Purifier门面提供的方法:

Purifier::clean('This is my H1 title', 'titles');
Purifier::clean('This is my H1 title', array('Attr.EnableID' => true));

php防止xss攻击

<?PHP
function clean_xss(&$string, $low = False)
{
 if (! is_array ( $string ))
 {
 $string = trim ( $string );
 $string = strip_tags ( $string );
 $string = htmlspecialchars ( $string );
 if ($low)
 {
 return True;
 }
 $string = str_replace ( array ('"', "\\", "'", "/", "..", "../", "./", "//" ), '', $string );
 $no = '/%0[0-8bcef]/';
 $string = preg_replace ( $no, '', $string );
 $no = '/%1[0-9a-f]/';
 $string = preg_replace ( $no, '', $string );
 $no = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S';
 $string = preg_replace ( $no, '', $string );
 return True;
 }
 $keys = array_keys ( $string );
 foreach ( $keys as $key )
 {
 clean_xss ( $string [$key] );
 }
}
//just a test
$str = '3water.com<meta http-equiv="refresh" content="0;">';
clean_xss($str); //如果你把这个注释掉,你就知道xss攻击的厉害了
echo $str;
?>

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP环境搭建最新方法
Sep 05 PHP
PHP数据缓存技术
Feb 14 PHP
PHP学习资料汇总与网址
Mar 16 PHP
php 连接mssql数据库 初学php笔记
Mar 01 PHP
来自phpguru得Php Cache类源码
Apr 15 PHP
php分页函数示例代码分享
Feb 24 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
Apr 17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
Jun 23 PHP
ThinkPHP 404页面的设置方法
Jan 14 PHP
PHP自定义函数获取URL中一级域名的方法
Aug 23 PHP
PHP定义字符串的四种方式详解
Feb 06 PHP
php+ajax实现商品对比功能示例
Apr 13 PHP
php中让人头疼的浮点数运算分析
Oct 10 #PHP
Laravel实现自定义错误输出内容的方法
Oct 10 #PHP
PHP定时任务获取微信access_token的方法
Oct 10 #PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
Oct 10 #PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
Oct 10 #PHP
Ajax实现对静态页面的文章访问统计功能示例
Oct 10 #PHP
PhpStorm terminal无法输入命令的解决方法
Oct 09 #PHP
You might like
星际原理概述
2020/03/04 星际争霸
PHP中cookies使用指南
2007/03/16 PHP
使用php语句将数据库*.sql文件导入数据库
2014/05/05 PHP
php自定义urlencode,urldecode函数实例
2015/03/24 PHP
PHP使用栈解决约瑟夫环问题算法示例
2017/08/27 PHP
初学js插入节点appendChild insertBefore使用方法
2011/07/04 Javascript
jquery tab插件精简版分享
2011/09/10 Javascript
Jquery index()方法 获取相应元素索引值
2012/10/12 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
一个炫酷的Bootstrap导航菜单
2016/12/28 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
详解关于react-redux中的connect用法介绍及原理解析
2017/09/11 Javascript
详解如何制作并发布一个vue的组件的npm包
2018/11/10 Javascript
layui checkbox默认选中,获取选中值,清空所有选中项的例子
2019/09/02 Javascript
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
python处理csv数据动态显示曲线实例代码
2018/01/23 Python
Python操作Redis之设置key的过期时间实例代码
2018/01/25 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
利用pyuic5将ui文件转换为py文件的方法
2019/06/19 Python
pyqt5 实现多窗口跳转的方法
2019/06/19 Python
python获取txt文件词向量过程详解
2019/07/05 Python
基于Python和PyYAML读取yaml配置文件数据
2020/01/13 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
2020/02/25 Python
Python3实现飞机大战游戏
2020/04/24 Python
如何利用Python识别图片中的文字
2020/05/31 Python
python解包概念及实例
2021/02/17 Python
Mamas & Papas沙特阿拉伯:英国最受欢迎的婴儿品牌
2017/11/20 全球购物
乐高瑞士官方商店:LEGO CH
2020/08/16 全球购物
建筑人员岗位职责
2013/12/25 职场文书
优秀班集体先进事迹材料
2014/05/28 职场文书
一份恶作剧的检讨书
2014/09/13 职场文书
婚庆答谢词大全
2015/09/29 职场文书
简单介绍Python的第三方库yaml
2021/06/18 Python
比较几种Redis集群方案
2021/06/21 Redis