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 相关文章推荐
15种PHP Encoder的比较
Apr 17 PHP
php 文件上传系统手记
Oct 26 PHP
有关JSON以及JSON在PHP中的应用
Apr 09 PHP
深入php socket的讲解与实例分析
Jun 13 PHP
PHP禁止个别IP访问网站
Oct 30 PHP
WebQQ最新登陆协议的用法
Dec 22 PHP
php实现统计网站在线人数的方法
May 12 PHP
php获取开始与结束日期之间所有日期的方法
Nov 29 PHP
php使用preg_match()函数验证ip地址的方法
Jan 07 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
May 02 PHP
PHP使用PDO抽象层获取查询结果的方法示例
May 10 PHP
Laravel实现通过blade模板引擎渲染视图
Oct 25 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实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
Jquery 基础学习笔记之文档处理
2009/05/29 Javascript
jQuery 操作option的实现代码
2011/03/03 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
2016/03/08 Javascript
JQuery解析XML数据的几个简单实例
2016/05/18 Javascript
javascript中JSON.parse()与eval()解析json的区别
2016/05/19 Javascript
基于jQuery实现页面搜索功能
2020/03/26 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
JS正则表达式修饰符global(/g)用法分析
2016/12/27 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
JS函数内部属性之arguments和this实例解析
2018/10/07 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
JavaScript浅层克隆与深度克隆示例详解
2020/09/01 Javascript
python脚本设置系统时间的两种方法
2016/02/21 Python
Python实现的knn算法示例
2018/06/14 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
Python中反射和描述器总结
2018/09/23 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
对python指数、幂数拟合curve_fit详解
2018/12/29 Python
python正则-re的用法详解
2019/07/28 Python
Python如何使用BeautifulSoup爬取网页信息
2019/11/26 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
Python爬虫之Selenium警告框(弹窗)处理
2020/12/04 Python
一款纯css3实现的非常实用的鼠标悬停特效演示
2014/11/05 HTML / CSS
高一政治教学反思
2014/01/28 职场文书
活动策划邀请函
2014/02/06 职场文书
医学生职业生涯规划书范文
2014/03/13 职场文书
交通事故赔偿协议书范本
2014/04/15 职场文书
心灵点滴观后感
2015/06/02 职场文书
2015年网络舆情工作总结
2015/07/24 职场文书
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android
Javascript中Microtask和Macrotask鲜为人知的知识点
2022/04/02 Javascript
Python FuzzyWuzzy实现模糊匹配
2022/04/28 Python
win10电脑右下角输入法图标不见了?Win10右下角不显示输入法的解决方法
2022/07/23 数码科技