1 <?php 2 3 /** 4 * Implements safety checks for safe iframes. 5 * 6 * @warning This filter is *critical* for ensuring that %HTML.SafeIframe 7 * works safely. 8 */ 9 class HTMLPurifier_URIFilter_SafeIframe extends HTMLPurifier_URIFilter 10 { 11 /** 12 * @type string 13 */ 14 public $name = 'SafeIframe'; 15 16 /** 17 * @type bool 18 */ 19 public $always_load = true; 20 21 /** 22 * @type string 23 */ 24 protected $regexp = null; 25 26 // XXX: The not so good bit about how this is all set up now is we 27 // can't check HTML.SafeIframe in the 'prepare' step: we have to 28 // defer till the actual filtering. 29 /** 30 * @param HTMLPurifier_Config $config 31 * @return bool 32 */ 33 public function prepare($config) 34 { 35 $this->regexp = $config->get('URI.SafeIframeRegexp'); 36 return true; 37 } 38 39 /** 40 * @param HTMLPurifier_URI $uri 41 * @param HTMLPurifier_Config $config 42 * @param HTMLPurifier_Context $context 43 * @return bool 44 */ 45 public function filter(&$uri, $config, $context) 46 { 47 // check if filter not applicable 48 if (!$config->get('HTML.SafeIframe')) { 49 return true; 50 } 51 // check if the filter should actually trigger 52 if (!$context->get('EmbeddedURI', true)) { 53 return true; 54 } 55 $token = $context->get('CurrentToken', true); 56 if (!($token && $token->name == 'iframe')) { 57 return true; 58 } 59 // check if we actually have some whitelists enabled 60 if ($this->regexp === null) { 61 return false; 62 } 63 // actually check the whitelists 64 return preg_match($this->regexp, $uri->toString()); 65 } 66 } 67 68 // vim: et sw=4 sts=4
title
Description
Body
title
Description
Body
title
Description
Body
title
Body