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通过COM使用ADODB的简单例子
Dec 31 PHP
PHP Google的translate API代码
Dec 10 PHP
在PHP中PDO解决中文乱码问题的一些补充
Sep 06 PHP
PHP stripos()函数及注意事项的分析
Jun 08 PHP
php 批量生成html,txt文件的实现代码
Jun 26 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
Sep 28 PHP
PHP安装threads多线程扩展基础教程
Nov 17 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
Dec 09 PHP
PHP如何使用Memcached
Apr 05 PHP
PHP异常处理定义与使用方法分析
Jul 25 PHP
PHP实现的AES 128位加密算法示例
Sep 16 PHP
TP5框架使用QueryList采集框架爬小说操作示例
Mar 26 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
php5.2时间相差8小时
2007/01/15 PHP
php全局变量和类配合使用深刻理解
2013/06/05 PHP
国外十大最流行的PHP框架排名
2013/07/04 PHP
5种PHP创建数组的实例代码分享
2014/01/17 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
2016/06/13 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
Prototype源码浅析 String部分(一)之有关indexOf优化
2012/01/15 Javascript
jQuery的缓存机制浅析
2014/06/07 Javascript
Javascript获取CSS伪元素属性的实现代码
2014/09/28 Javascript
JQuery实现展开关闭层的方法
2015/02/17 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
2015/03/16 Javascript
JavaScript实现点击文字切换登录窗口的方法
2015/05/11 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
2017/11/06 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
2018/03/01 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
[01:33]PWL开团时刻DAY2-开雾与反开雾
2020/10/31 DOTA
Python实现的几个常用排序算法实例
2014/06/16 Python
python爬虫入门教程--正则表达式完全指南(五)
2017/05/25 Python
如何在Cloud Studio上执行Python代码?
2019/08/09 Python
奥地利购买珠宝和手表网站:ELLA JUWELEN
2019/09/03 全球购物
小学班主任培训方案
2014/06/04 职场文书
创先争优标语
2014/06/27 职场文书
感恩教育月活动总结
2014/07/07 职场文书
旅游与酒店管理专业求职信
2014/07/21 职场文书
工作失误检讨书(3篇)
2014/10/11 职场文书
2014年保险业务员工作总结
2014/12/23 职场文书
团代会开幕词
2015/01/28 职场文书
市场部岗位职责范本
2015/04/15 职场文书
2016党员三严三实心得体会
2016/01/15 职场文书
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
2021/04/01 PHP
Golang 入门 之url 包
2022/05/04 Golang