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 相关文章推荐
用Apache反向代理设置对外的WWW和文件服务器
Oct 09 PHP
在PHP3中实现SESSION的功能(一)
Oct 09 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
Dec 29 PHP
非常实用的php弹出错误警告函数扩展性强
Jan 17 PHP
windows7下安装php的php-ssh2扩展教程
Jul 04 PHP
PHP实现简单搜歌的方法
Jul 28 PHP
日常整理PHP中简单的图形处理(经典)
Oct 26 PHP
简单了解PHP编程中数组的指针的使用
Nov 30 PHP
PHP内核学习教程之php opcode内核实现
Jan 27 PHP
php提取微信账单的有效信息
Oct 01 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
Feb 27 PHP
Laravel使用原生sql语句并调用的方法
Oct 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
德生S2000电路分析
2021/03/02 无线电
php的一个简单加密解密代码
2014/01/14 PHP
php实现按指定大小等比缩放生成上传图片缩略图的方法
2014/12/15 PHP
php中session与cookie的比较
2015/01/27 PHP
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
2011/06/08 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
实例讲解jquery与json的结合
2016/01/07 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
AngularJS入门教程之AngularJS指令
2016/04/18 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
vue实现的网易云音乐在线播放和下载功能案例
2019/02/18 Javascript
vue中使用props传值的方法
2019/05/08 Javascript
判断js数据类型的函数实例详解
2019/05/23 Javascript
JS浏览器BOM常见操作实例详解
2020/04/27 Javascript
Vuex中的Mutations的具体使用方法
2020/06/01 Javascript
在nuxt中使用路由重定向的实例
2020/11/06 Javascript
Python升级提示Tkinter模块找不到的解决方法
2014/08/22 Python
Python配置文件解析模块ConfigParser使用实例
2015/04/13 Python
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
2017/07/07 Python
Series和DataFrame使用简单入门
2019/11/13 Python
selenium+Chrome滑动验证码破解二(某某网站)
2019/12/17 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
Hello Molly美国:女性时尚在线
2019/08/26 全球购物
碧欧泉法国官网:Biotherm法国
2019/10/23 全球购物
服装设计行业个人的自我评价
2013/12/20 职场文书
高级护理专业毕业生推荐信
2013/12/25 职场文书
单位工作证明格式模板
2014/10/04 职场文书
2015年大学生党员承诺书
2015/04/27 职场文书
追悼会家属答谢词
2015/09/29 职场文书
高中班长竞选稿
2015/11/20 职场文书
HTML5基础学习之文本标签控制
2022/03/25 HTML / CSS
Python之matplotlib绘制饼图
2022/04/13 Python
JavaScript前端面试扁平数据转tree与tree数据扁平化
2022/06/14 Javascript