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 08 PHP
php中判断文件空目录是否有读写权限的函数代码
Aug 07 PHP
解析关于wamp启动是80端口被占用的问题
Jun 21 PHP
php加密解密函数authcode的用法详细解析
Oct 28 PHP
php中实现记住密码下次自动登录的例子
Nov 06 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
Dec 22 PHP
PHP实现采集抓取淘宝网单个商品信息
Jan 08 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
Mar 19 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
Apr 17 PHP
PHP实现的DES加密解密类定义与用法示例
Nov 02 PHP
tp5.1框架数据库子查询操作实例分析
May 26 PHP
imagettftext() 失效,不起作用
Mar 09 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 fgetcsv 定义和用法(附windows与linux下兼容问题)
2012/05/29 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
YII2自动登录Cookie总是失效的解决方法
2017/06/28 PHP
Javascript实例教程(19) 使用HoTMetal(5)
2006/12/23 Javascript
jquery加载页面的方法(页面加载完成就执行)
2011/06/21 Javascript
js中escape对应的C#解码函数 UrlDecode
2012/12/16 Javascript
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
2015/02/05 Javascript
jquery动画效果学习笔记(8种效果)
2015/11/13 Javascript
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
详解Node中导入模块require和import的区别
2017/08/11 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
[44:37]完美世界DOTA2联赛PWL S3 Forest vs access 第一场 12.11
2020/12/13 DOTA
python连接oracle数据库实例
2014/10/17 Python
Python加密方法小结【md5,base64,sha1】
2017/07/13 Python
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
Python实现字符串匹配的KMP算法
2019/04/04 Python
python设计tcp数据包协议类的例子
2019/07/23 Python
django创建简单的页面响应实例教程
2019/09/06 Python
python redis 批量设置过期key过程解析
2019/11/26 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
python实现定时发送邮件
2020/12/23 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
css3动画效果小结(推荐)
2016/07/25 HTML / CSS
Html5新标签解释及用法
2012/02/17 HTML / CSS
jQuery treeview树形结构应用
2021/03/24 jQuery
汽车检测与维修专业求职信
2013/10/30 职场文书
大学生思想汇报范文
2013/12/31 职场文书
项目开发计划书
2014/01/09 职场文书
简单的辞职信模板
2015/05/12 职场文书
Python基础之常用库常用方法整理
2021/04/30 Python
详解Python中__new__方法的作用
2022/03/31 Python