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基础知识:类与对象(5) static
Dec 13 PHP
php中通过smtp发邮件的类,测试通过
Jan 22 PHP
PHP 设置MySQL连接字符集的方法
Jan 02 PHP
PHP把网页保存为word文件的三种方法
Apr 01 PHP
php中socket通信机制实例详解
Jan 03 PHP
php如何获取文件的扩展名
Oct 28 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
Mar 15 PHP
yii2中的rules 自定义验证规则详解
Apr 19 PHP
php读取torrent种子文件内容的方法(测试可用)
May 03 PHP
laravel学习教程之关联模型
Jul 30 PHP
PHP实现负载均衡的加权轮询方法分析
Aug 22 PHP
php根据地址获取百度地图经纬度的实例方法
Sep 03 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
BBS(php &amp; mysql)完整版(七)
2006/10/09 PHP
PHP数据库调用类调用实例(详细注释)
2012/07/12 PHP
PHP学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
php使用GD实现颜色渐变实例
2015/06/02 PHP
php实现的递归提成方案实例
2015/11/14 PHP
jQuery 点击图片跳转上一张或下一张功能的实现代码
2010/03/12 Javascript
关于全局变量和局部变量的那些事
2013/01/11 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
JavaScript监听和禁用浏览器回车事件实例
2015/01/31 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
php+ajax+jquery实现点击加载更多内容
2015/05/03 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
微信公众平台开发教程(五)详解自定义菜单
2016/12/02 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
2016/12/27 Javascript
详解Weex基于Vue2.0开发模板搭建
2017/03/20 Javascript
AngularJS service之select下拉菜单效果
2017/07/28 Javascript
jQuery实现广告条滚动效果
2017/08/22 jQuery
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
2018/07/31 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
[03:57]《不朽》——2015DOTA2国际邀请赛—中国军团出征主题曲MV
2015/07/15 DOTA
[01:35:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第一场 1月18日
2021/03/11 DOTA
Python科学计算之Pandas详解
2017/01/15 Python
python生成随机图形验证码详解
2017/11/08 Python
强悍的Python读取大文件的解决方案
2019/02/16 Python
python对Excel按条件进行内容补充(推荐)
2019/11/24 Python
Python获取、格式化当前时间日期的方法
2020/02/10 Python
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
德国足球商店:OUTFITTER
2019/05/06 全球购物
瑞典度假品牌:OAS
2019/05/28 全球购物
护理专科毕业推荐信
2013/11/10 职场文书
个人求职信范文分享
2014/01/06 职场文书
西式婚礼主持词
2014/03/13 职场文书
工作失误检讨书(3篇)
2014/10/11 职场文书
如何写贫困证明申请书
2014/10/29 职场文书
食品安全主题班会
2015/08/13 职场文书
python - timeit 时间模块
2021/04/06 Python