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 相关文章推荐
删除及到期域名的查看(抢域名必备哦)
May 14 PHP
PHP 在线翻译函数代码
May 07 PHP
用Zend Encode编写开发PHP程序
Feb 21 PHP
php中使用临时表查询数据的一个例子
Feb 03 PHP
php中通过curl检测页面是否被百度收录
Sep 27 PHP
PHP类继承 extends使用介绍
Jan 14 PHP
Codeigniter注册登录代码示例
Jun 12 PHP
php几个预定义变量$_SERVER用法小结
Nov 07 PHP
php中$_POST与php://input的区别实例分析
Jan 07 PHP
thinkPHP分组后模板无法加载问题解决方法
Jul 12 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
Aug 31 PHP
PHP使用Http Post请求发送Json对象数据代码解析
Jul 16 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
PHP4之COOKIE支持详解
2006/10/09 PHP
PHP 巧用数组降低程序的时间复杂度
2010/01/01 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
2016/05/19 PHP
thinkPHP5.0框架API优化后的友好性分析
2017/03/17 PHP
window.opener用法和用途实例介绍
2013/08/19 Javascript
js操作label给label赋值及取label的值示例
2013/11/07 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
js设置function参数默认值(适合没有传参情况)
2014/02/24 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
2015/09/02 Javascript
javascript cookie的简单应用
2016/02/24 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
关于angularJs指令的Scope(作用域)介绍
2016/10/25 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
解决微信浏览器缓存站点入口文件(IIS部署Vue项目)
2019/06/17 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
2020/11/07 Javascript
jquery实现广告上下滚动效果
2021/03/04 jQuery
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
python超简单解决约瑟夫环问题
2015/05/12 Python
python动态参数用法实例分析
2015/05/25 Python
Python通过select实现异步IO的方法
2015/06/04 Python
python3.6.3转化为win-exe文件发布的方法
2018/10/31 Python
详解python3 + Scrapy爬虫学习之创建项目
2019/04/12 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
2019/04/26 Python
python 梯度法求解函数极值的实例
2019/07/10 Python
Python3 tkinter 实现文件读取及保存功能
2019/09/12 Python
python 创建一维的0向量实例
2019/12/02 Python
python map比for循环快在哪
2020/09/21 Python
pycharm配置QtDesigner的超详细方法
2021/01/25 Python
HTML文本属性&amp;颜色控制属性的实现
2019/12/17 HTML / CSS
旅游管理毕业生自荐信
2013/11/05 职场文书
高中生毕业学习总结的自我评价
2013/11/14 职场文书
红领巾广播站广播稿
2014/02/01 职场文书
毕业论文答辩开场白
2015/05/27 职场文书
2016年寒假社会实践活动总结
2015/10/10 职场文书