CSP: child-src и frame-src устарели




  1. в CSP v2 фрейм-src был устаревшим. child-src рекомендуется использовать вместо этого.

  2. в CSP v3 frame-src в undeprecated и child-src является устаревшим.

  3. в настоящее время (сентябрь 2017) Chrome:



Директива "child-src" устарела и будет удалена в M60, примерно в августе 2017 года. Пожалуйста, используйте директиву 'script-src' для рабочих вместо этого.




Итак, что такое правильный набор директив для работы современные (минус 2 версии) браузеры? Выглядит как frame-src + script-src достаточно? Но что же тогда должно быть в script-src ?



PS: Это вообще законно, чтобы" undeprecate " вещи?

381   1  

1 ответ:

Это даже немного сложнее, чем то, что описано в вопросе, потому что спецификация CSP3 также вводит директиву worker-src . Но спецификация дает следующие указания :

Модель child-src была существенно изменена:

  1. директива frame-src, которая была признана устаревшей на уровне CSP 2, была не признана, но продолжает считаться с child-src, если ее нет (что, в свою очередь, относится к default-src).
  2. директива worker-src имеет добавлено, отсылая к script-src, если его нет (что также отсылает к default-src в свою очередь).
  3. child-src теперь устарел.

Это в https://w3c.github.io/webappsec-csp/, который является черновиком редактора, но это то, что вы всегда должны консультироваться с текущими требованиями спецификации. Причина: вы не можете доверять https://www.w3.org/TR/CSP/ быть в курсе (и вообще вы не можете доверять ничему под https://www.w3.org/TR быть в курсе событий), а редакторские черновики-это то, что на самом деле реализуют разработчики браузера (они не ждут реализации, пока что-то не будет опубликовано под https://www.w3.org/TR).

В любом случае, причина, по которой Директива child-src была отвергнута, заключается в том, что ее действие определено как :

Директиваchild-src управляет созданием вложенных контекстов просмотра (например, <iframe> и <frame> навигации) и контекстов выполнения рабочего процесса.

Проблема с тем, что на практике происходит: iframe очень отличается от рабочего сценария. Так вот почему worker-src был добавлен и почему frame-src не был признан устаревшим (потому что вы действительно хотите отдельную директиву для указания политик для элементов iframe), и почему child-src был признан устаревшим (потому что вы действительно не хотите применять одну политику к элементам iframe и рабочим скриптам).

Итак, каков правильный набор директив для работы в современных (минус 2 версии) браузеры?

Похоже, что ответ на этот вопрос зависит от того, для чего именно вы хотите указать политику.

  1. Если ваши потребности просты и поэтому вы не хотите иметь разные политики для iframe элементов и сценариев, то просто используйте default-src, чтобы указать одну и ту же политику для обоих.
  2. Если ваши потребности более сложны и вам нужна политика для элементов iframe, которая отличается от политики для других ресурсов, чем использование frame-src. Аналогично, если вам нужна политика для сценариев, отличающихся от политики для других ресурсов, используйте script-src. Если вы не хотите, чтобы политика для рабочих сценариев отличалась от политики для других сценариев, то вы можете просто предоставить политику script-src и остановиться на этом.
  3. Если вы хотите, чтобы политика для рабочих сценариев отличалась от политики для других сценариев, то наряду с предоставлением политикиscript-src, предоставьте также политику worker-src. worker-src один пока не повлияет на браузеры, но будет проверен в будущем вещи для тех случаев, когда браузеры действительно добавляют поддержку.

PS: Это вообще законно, чтобы" undeprecate " вещи?

Да. Хотя я не могу припомнить, чтобы когда-либо видел, чтобы какая-либо другая спецификация или рабочая группа делали это, в данном случае это было правильно-потому что авторы спецификации CSP и рабочая группа поняли, что child-src было ошибкой, и frame-src было на самом деле необходимо, и было ошибкой его осуждать.

Таким образом, они раскрутили эти ошибки-и относительно быстро. И отчасти потому, что это работа в этом случае заключается в следующем: frame-src не был устаревшим достаточно долго для браузеров, чтобы когда-либо отказаться от его поддержки, а также многие веб-разработчики никогда не удосуживались использовать child-src Для начала.

Comments

    Ничего не найдено.