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的面试题集
Nov 19 PHP
如何隐藏你的.php文件
Jan 04 PHP
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 PHP
php生成随机密码自定义函数代码(简单快速)
May 10 PHP
PHP实现返回JSON和XML的类分享
Jan 28 PHP
Symfony2开发之控制器用法实例分析
Feb 05 PHP
PHP实现的浏览器检查类
Apr 11 PHP
PHPExcel笔记, mpdf导出
May 03 PHP
Smarty简单生成表单元素的方法示例
May 23 PHP
Laravel中错误与异常处理的用法示例
Sep 16 PHP
Laravel框架自定义验证过程实例分析
Feb 01 PHP
YII2 全局异常处理深入讲解
Mar 24 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中文乱码解决方案
2015/03/05 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
Javascript 继承机制实例
2009/08/12 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
2012/12/09 Javascript
经过绑定元素时会多次触发mouseover和mouseout事件
2014/02/28 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
JS检测移动端横竖屏的代码
2016/05/30 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
2017/02/15 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
如何理解Vue的.sync修饰符的使用
2017/08/17 Javascript
nodejs使用redis作为缓存介质实现的封装缓存类示例
2018/02/07 NodeJs
Vue $emit $refs子父组件间方法的调用实例
2018/09/12 Javascript
详解微信小程序实现仿微信聊天界面(各种细节处理)
2019/02/17 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
Vue学习之axios的使用方法实例分析
2020/01/06 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
Python Tkinter模块 GUI 可视化实例
2019/11/20 Python
python实现查找所有程序的安装信息
2020/02/18 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
Python统计学一数据的概括性度量详解
2020/03/03 Python
Python实现井字棋小游戏
2020/03/09 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
利用三角函数在canvas上画虚线的方法
2018/01/11 HTML / CSS
中国酒类在线零售网站:酒仙网
2016/08/20 全球购物
MATCHESFASHION.COM美国官网:英国奢侈品零售商
2018/10/29 全球购物
Lookfantastic意大利官网:英国知名美妆购物网站
2019/05/31 全球购物
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
自动化毕业生专业自荐书范文
2014/02/04 职场文书
房屋所有权证明
2014/10/20 职场文书
2015年护士工作总结范文
2015/03/31 职场文书
堂吉诃德读书笔记
2015/06/30 职场文书
2016年党员读书月活动总结
2016/04/06 职场文书
pytorch通过训练结果的复现设置随机种子
2021/06/01 Python