IframeTest.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Payment\Block\Transparent;
  7. /**
  8. * Class IframeTest
  9. * @package Magento\Payment\Block\Transparent
  10. */
  11. class IframeTest extends \PHPUnit\Framework\TestCase
  12. {
  13. /**
  14. * @magentoAppIsolation enabled
  15. * @magentoAppArea frontend
  16. * @dataProvider xssDataProvider
  17. */
  18. public function testToHtml($xssString)
  19. {
  20. /** @var $block Iframe */
  21. $block = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
  22. \Magento\Framework\View\LayoutInterface::class
  23. )->createBlock(
  24. \Magento\Payment\Block\Transparent\Iframe::class
  25. );
  26. $block->setTemplate('transparent/iframe.phtml');
  27. $block->setData(
  28. 'params',
  29. [
  30. 'redirect' => $xssString,
  31. 'redirect_parent' => $xssString,
  32. 'error_msg' => $xssString
  33. ]
  34. );
  35. $content = $block->toHtml();
  36. $this->assertNotContains($xssString, $content, 'Params must be escaped');
  37. $this->assertContains($block->escapeXssInUrl($xssString), $content, 'Content must be present');
  38. }
  39. /**
  40. * @return array
  41. */
  42. public function xssDataProvider()
  43. {
  44. return [
  45. ['</script><script>alert("XSS")</script>'],
  46. ['javascript%3Aalert%28String.fromCharCode%280x78%29%2BString.fromCharCode%280x73%29%2BString.'
  47. . 'fromCharCode%280x73%29%29'],
  48. ['javascript:alert(String.fromCharCode(0x78)+String.fromCharCode(0x73)+String.fromCharCode(0x73))']
  49. ];
  50. }
  51. }