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
Apache 配置详解(最好的APACHE配置教程)
Jul 04 PHP
php代码收集表单内容并写入文件的代码
Jan 29 PHP
php IP转换整形(ip2long)的详解
Jun 06 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
Jul 05 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
Feb 15 PHP
php生成带logo二维码方法小结
Apr 08 PHP
什么是OneThink oneThink后台添加插件步骤
Apr 13 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
Oct 18 PHP
PHP实现类似于C语言的文件读取及解析功能
Sep 01 PHP
360搜索引擎自动收录php改写方案
Apr 28 PHP
php微信公众号开发之翻页查询
Oct 20 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
2014/09/28 PHP
PHP mysql事务问题实例分析
2016/01/18 PHP
PHP递归遍历多维数组实现无限分类的方法
2016/05/06 PHP
php输出控制函数和输出函数生成静态页面
2019/06/27 PHP
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
解析瀑布流布局:JS+绝对定位的实现
2013/05/08 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
Vue.js开发环境搭建
2016/11/10 Javascript
JavaScript中splice与slice的区别
2017/05/09 Javascript
微信小程序 navbar实例详解
2017/05/11 Javascript
js 获取元素的具体样式信息getcss(实例讲解)
2017/07/05 Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
2019/07/11 jQuery
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
JS数组扁平化、去重、排序操作实例详解
2020/02/24 Javascript
[47:31]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.12
2020/12/16 DOTA
用Python制作简单的钢琴程序的教程
2015/04/01 Python
解决PyCharm中光标变粗的问题
2017/08/05 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
Python使用正则表达式获取网页中所需要的信息
2018/01/29 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
python3下实现搜狗AI API的代码示例
2018/04/10 Python
无法使用pip命令安装python第三方库的原因及解决方法
2018/06/12 Python
解决使用PyCharm时无法启动控制台的问题
2019/01/19 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
对Python中画图时候的线类型详解
2019/07/07 Python
pytorch梯度剪裁方式
2020/02/04 Python
用什么库写 Python 命令行程序(示例代码详解)
2020/02/20 Python
Django基于Models定制Admin后台实现过程解析
2020/11/11 Python
python爬虫筛选工作实例讲解
2020/11/23 Python
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
迪奥美国官网:Dior美国
2019/12/07 全球购物
二年级上册数学教学计划
2015/01/20 职场文书
周恩来的四个昼夜观后感
2015/06/03 职场文书
Go Plugins插件的实现方式
2021/08/07 Golang
关于使用Redisson订阅数问题
2022/01/18 Redis