*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Tests\HtmlSanitizer\Sanitizer;
use HtmlSanitizer\Extension\Iframe\Sanitizer\IframeSrcSanitizer;
use PHPUnit\Framework\TestCase;
class IframeSrcSanitizerTest extends TestCase
{
public function provideUrls()
{
// Simple cases
yield [
'allowedSchemes' => ['http', 'https'],
'allowedHosts' => null,
'allowRelativeLinks' => false,
'forceHttps' => false,
'input' => 'https://trusted.com/iframe.php',
'output' => 'https://trusted.com/iframe.php',
];
yield [
'allowedSchemes' => ['http', 'https'],
'allowedHosts' => ['trusted.com'],
'allowRelativeLinks' => false,
'forceHttps' => false,
'input' => 'https://trusted.com/iframe.php',
'output' => 'https://trusted.com/iframe.php',
];
yield [
'allowedSchemes' => ['http', 'https'],
'allowedHosts' => ['trusted.com'],
'allowRelativeLinks' => false,
'forceHttps' => false,
'input' => 'https://untrusted.com/iframe.php',
'output' => null,
];
yield [
'allowedSchemes' => ['http', 'https'],
'allowedHosts' => null,
'allowRelativeLinks' => false,
'forceHttps' => false,
'input' => '/iframe.php',
'output' => null,
];
yield [
'allowedSchemes' => ['http', 'https'],
'allowedHosts' => null,
'allowRelativeLinks' => true,
'forceHttps' => false,
'input' => '/iframe.php',
'output' => '/iframe.php',
];
// Force HTTPS
yield [
'allowedSchemes' => ['http', 'https'],
'allowedHosts' => ['trusted.com'],
'allowRelativeLinks' => false,
'forceHttps' => true,
'input' => 'http://trusted.com/iframe.php',
'output' => 'https://trusted.com/iframe.php',
];
// Data-URI not allowed
yield [
'allowedSchemes' => ['http', 'https'],
'allowedHosts' => null,
'allowRelativeLinks' => false,
'forceHttps' => false,
'input' => 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',
'output' => null,
];
yield [
'allowedSchemes' => ['http', 'https'],
'allowedHosts' => null,
'allowRelativeLinks' => false,
'forceHttps' => true,
'input' => 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',
'output' => null,
];
yield [
'allowedSchemes' => ['https'],
'allowedHosts' => null,
'allowRelativeLinks' => false,
'forceHttps' => false,
'input' => 'http://trusted.com/iframe.php',
'output' => null,
];
}
/**
* @dataProvider provideUrls
*/
public function testSanitize($allowedSchemes, $allowedHosts, $allowRelativeLinks, $forceHttps, $input, $expected)
{
$this->assertSame($expected, (new IframeSrcSanitizer($allowedSchemes, $allowedHosts, $allowRelativeLinks, $forceHttps))->sanitize($input));
}
}