file_download_link-8.x-1.0/tests/src/Functional/FileDownloadLinkXssTest.php

tests/src/Functional/FileDownloadLinkXssTest.php
<?php

namespace Drupal\Tests\file_download_link\Functional;

use Drupal\file\Entity\File;
use Drupal\media\Entity\Media;
use Drupal\node\Entity\Node;
use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\TestFileCreationTrait;

/**
 * Tests file_download_link xss protection.
 *
 * @group file_download_link
 * @requires module token
 */
class FileDownloadLinkXssTest extends BrowserTestBase {

  use TestFileCreationTrait;

  /**
   * Modules to enable.
   *
   * @var array
   */
  protected static $modules = [
    'file_download_link_multilingual_test',
  ];

  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';

  /**
   * XSS string
   *
   * @var string
   */
  protected $xssString = "<script>alert('xss');</script>";

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();
    $admin_user = $this->drupalCreateUser([], NULL, TRUE);
    $this->drupalLogin($admin_user);

    $english_uri = $this::generateFile('my-english-text', 10, 10, 'text');
    $english_file = File::create([
      'uri' => $english_uri,
      'filename' => 'my-english-text',
    ]);
    $english_file->save();
    $french_uri = $this::generateFile('ma-texte-francaise', 10, 11, 'text');
    $french_file = File::create([
      'uri' => $french_uri,
      'filename' => 'ma-texte-francaise',
    ]);
    $french_file->save();

    $media = Media::create([
      'bundle' => 'test_media',
      'name' => $this->xssString,
      'field_media_file' => $english_file->id(),
      'field_description' => $this->xssString,
    ]);
    $media->addTranslation('fr', [
      'name' => $this->xssString,
      'field_media_file' => $french_file->id(),
      'field_description' => $this->xssString,
    ]);
    $media->save();
    // Create un-translated media.
    $media_un = Media::create([
      'bundle' => 'test_media',
      'name' => $this->xssString,
      'field_media_file' => $english_file->id(),
      'field_description' => $this->xssString,
    ]);
    $media_un->save();

    $test_files = $this->getTestFiles('image');
    $image1 = File::create([
      'uri' => $test_files[0]->uri,
      'filename' => 'image1',
    ]);
    $image1->save();
    $image2 = File::create([
      'uri' => $test_files[1]->uri,
      'filename' => 'image2',
    ]);
    $image2->save();

    // Create article referencing media and images.
    $node = Node::create([
      'type' => 'test_node',
      'title' => 'My Test Node',
      'field_media' => [$media->id(), $media_un->id()],
      'field_media_un' => [$media->id(), $media_un->id()],
      'field_image' => [
        [
          'target_id' => $image1->id(),
          'alt' => $this->xssString,
        ],
        [
          'target_id' => $image2->id(),
          'alt' => $this->xssString,
        ],
      ],
    ]);
    $node->addTranslation('fr', [
      'title' => 'Ma Node de Teste',
      'field_media' => [$media->id(), $media_un->id()],
      'field_image' => [
        [
          'target_id' => $image1->id(),
          'alt' => $this->xssString,
        ],
        [
          'target_id' => $image2->id(),
          'alt' => $this->xssString,
        ],
      ],
    ]);
    $node->save();
  }

  /**
   * Tests file_download_link xss prevention.
   */
  public function testFileDownloadLinkXss() {
    $this->drupalGet('node/1');
    $this->assertSession()->pageTextContains('My Test Node');
    $this->assertSession()->responseNotContains($this->xssString);
    $this->assertSession()->pageTextContains($this->xssString);
    $this->drupalGet('fr/node/1');
    $this->assertSession()->pageTextContains('Ma Node de Teste');
    $this->assertSession()->responseNotContains($this->xssString);
    $this->assertSession()->pageTextContains($this->xssString);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc