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 相关文章推荐
第四节 构造函数和析构函数 [4]
Oct 09 PHP
Apache+php+mysql在windows下的安装与配置图解(最新版)
Nov 30 PHP
解决File size limit exceeded 错误的方法
Jun 14 PHP
PHP连接sql server 2005环境配置及问题解决
Aug 08 PHP
PHP中的闭包(匿名函数)浅析
Feb 07 PHP
PHP使用递归方式列出当前目录下所有文件的方法
Jun 02 PHP
PHP如何实现Unicode和Utf-8编码相互转换
Jul 29 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
Jan 17 PHP
php实现base64图片上传方式实例代码
Feb 22 PHP
利用 fsockopen() 函数开放端口扫描器的实例
Aug 19 PHP
php实现文章评论系统
Feb 18 PHP
Laravel 添加多语言提示信息的方法
Sep 29 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
php实现的zip文件内容比较类
2014/09/24 PHP
php查询及多条件查询
2017/02/26 PHP
关于图片验证码设计的思考
2007/01/29 Javascript
用jscript启动sqlserver
2007/06/21 Javascript
ajax 文件上传应用简单实现
2009/03/03 Javascript
input 输入框内的输入事件详细分析
2010/03/17 Javascript
js DOM的学习笔记
2011/12/22 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
2016/07/13 Javascript
微信小程序使用request网络请求操作实例
2017/12/15 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
2019/04/04 Javascript
Layui Form 自定义验证的实例代码
2019/09/14 Javascript
js实现可爱的气泡特效
2020/09/05 Javascript
Python多线程下载文件的方法
2015/07/10 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
2017/12/11 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
python爬虫获取百度首页内容教学
2018/12/23 Python
详解Python用户登录接口的方法
2019/04/17 Python
使用tensorflow进行音乐类型的分类
2020/08/14 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
css3选择器基本介绍
2014/12/15 HTML / CSS
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
亚洲颇具影响力的男性在线购物零售商:His
2019/11/24 全球购物
通用C#笔试题附答案
2016/11/26 面试题
软件工程专业推荐信
2013/10/28 职场文书
投标担保书范文
2014/04/02 职场文书
《孔繁森》教学反思
2014/04/17 职场文书
抵押贷款承诺书
2014/05/30 职场文书
护理专业毕业生自荐信
2014/06/15 职场文书
目标责任书格式
2014/07/28 职场文书
2014年学校党建工作总结
2014/11/11 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
英语复习计划
2015/01/19 职场文书
教师节慰问信
2015/02/15 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书