CspMiddlewareTest.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. /**
  3. * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
  4. * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
  5. *
  6. * Licensed under The MIT License
  7. * For full copyright and license information, please see the LICENSE.txt
  8. * Redistributions of files must retain the above copyright notice.
  9. *
  10. * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
  11. * @link http://cakephp.org CakePHP(tm) Project
  12. * @since 3.9.0
  13. * @license http://www.opensource.org/licenses/mit-license.php MIT License
  14. */
  15. namespace Cake\Test\TestCase\Http\Middleware;
  16. use Cake\Http\Middleware\CspMiddleware;
  17. use Cake\Http\Response;
  18. use Cake\Http\ServerRequest;
  19. use Cake\TestSuite\TestCase;
  20. use ParagonIE\CSPBuilder\CSPBuilder;
  21. /**
  22. * Content Security Policy Middleware Test
  23. */
  24. class CspMiddlewareTest extends TestCase
  25. {
  26. /**
  27. * testInvoke
  28. *
  29. * @return void
  30. */
  31. public function testProcess()
  32. {
  33. $request = new ServerRequest();
  34. $middleware = new CspMiddleware([
  35. 'script-src' => [
  36. 'allow' => [
  37. 'https://www.google-analytics.com',
  38. ],
  39. 'self' => true,
  40. 'unsafe-inline' => false,
  41. 'unsafe-eval' => false,
  42. ],
  43. ]);
  44. $next = function ($request, $response) {
  45. $expected = [
  46. 'script-src \'self\' https://www.google-analytics.com; ',
  47. ];
  48. $headers = $response->getHeaders();
  49. $this->assertNotEmpty($headers['Content-Security-Policy']);
  50. $this->assertEquals($expected, $headers['Content-Security-Policy']);
  51. };
  52. $response = new Response();
  53. $middleware($request, $response, $next);
  54. }
  55. /**
  56. * testPassingACSPBuilderInstance
  57. *
  58. * @return void
  59. */
  60. public function testPassingACSPBuilderInstance()
  61. {
  62. $request = new ServerRequest();
  63. $config = [
  64. 'script-src' => [
  65. 'allow' => [
  66. 'https://www.google-analytics.com',
  67. ],
  68. 'self' => true,
  69. 'unsafe-inline' => false,
  70. 'unsafe-eval' => false,
  71. ],
  72. ];
  73. $cspBuilder = new CSPBuilder($config);
  74. $middleware = new CspMiddleware($cspBuilder);
  75. $next = function ($request, $response) {
  76. $headers = $response->getHeaders();
  77. $expected = [
  78. 'script-src \'self\' https://www.google-analytics.com; ',
  79. ];
  80. $this->assertNotEmpty($headers['Content-Security-Policy']);
  81. $this->assertEquals($expected, $headers['Content-Security-Policy']);
  82. };
  83. $response = new Response();
  84. $middleware($request, $response, $next);
  85. }
  86. }