PHP7 + Laravel5 如何防止XSS跨站攻擊?

主要介紹Laravel5中如何防止XSS跨站攻擊的方法,結合實例形式分析了Laravel5基於Purifier擴展包集成 -- HTMLPurifier來防止XSS跨站攻擊。

1、安裝HTMLPurifier 
HTMLPurifier 是基於PHP 編寫的rich HTML 過濾器,可以使用它來防止XSS 跨站攻擊。Purifier 是在Laravel 5 中集成HTMLPurifier 的擴展包,我們可以通過Composer 來安裝這個擴展包:
Composer 

composer require mews/purifier


安裝完成後,在配置文件config/app.php的providers中註冊HTMLPurifier服務提供者:
config/app.php
'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 = '<meta http-equiv="refresh" content="0;">';
clean_xss($str);
echo $str;



HTMLPurifier官網:http://htmlpurifier.org/

Larabel防止跨站攻擊 XSS 
 

回上一頁

相關文章:

喜歡這篇文章嗎?立即分享

Posted : / Views: 1477
Last updated :2017-10-25