CSP: child-src и frame-src устарели
- в CSP v2 фрейм-src был устаревшим. child-src рекомендуется использовать вместо этого.
- в CSP v3 frame-src в undeprecated и child-src является устаревшим.
- в настоящее время (сентябрь 2017) Chrome:
Директива "child-src" устарела и будет удалена в M60, примерно в августе 2017 года. Пожалуйста, используйте директиву 'script-src' для рабочих вместо этого.
Итак, что такое правильный набор директив для работы современные (минус 2 версии) браузеры? Выглядит как frame-src + script-src достаточно? Но что же тогда должно быть в script-src ?
PS: Это вообще законно, чтобы" undeprecate " вещи?
1 ответ:
Это даже немного сложнее, чем то, что описано в вопросе, потому что спецификация CSP3 также вводит директиву
worker-src. Но спецификация дает следующие указания :Модель
child-srcбыла существенно изменена:
- директива
frame-src, которая была признана устаревшей на уровне CSP 2, была не признана, но продолжает считаться сchild-src, если ее нет (что, в свою очередь, относится кdefault-src).- директива
worker-srcимеет добавлено, отсылая кscript-src, если его нет (что также отсылает к default-src в свою очередь).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 версии) браузеры?
Похоже, что ответ на этот вопрос зависит от того, для чего именно вы хотите указать политику.
- Если ваши потребности просты и поэтому вы не хотите иметь разные политики для
Если ваши потребности более сложны и вам нужна политика для элементовiframeэлементов и сценариев, то просто используйтеdefault-src, чтобы указать одну и ту же политику для обоих.iframe, которая отличается от политики для других ресурсов, чем использованиеframe-src. Аналогично, если вам нужна политика для сценариев, отличающихся от политики для других ресурсов, используйтеscript-src. Если вы не хотите, чтобы политика для рабочих сценариев отличалась от политики для других сценариев, то вы можете просто предоставить политикуscript-srcи остановиться на этом.- Если вы хотите, чтобы политика для рабочих сценариев отличалась от политики для других сценариев, то наряду с предоставлением политики
script-src, предоставьте также политикуworker-src.worker-srcодин пока не повлияет на браузеры, но будет проверен в будущем вещи для тех случаев, когда браузеры действительно добавляют поддержку.PS: Это вообще законно, чтобы" undeprecate " вещи?
Да. Хотя я не могу припомнить, чтобы когда-либо видел, чтобы какая-либо другая спецификация или рабочая группа делали это, в данном случае это было правильно-потому что авторы спецификации CSP и рабочая группа поняли, что
Таким образом, они раскрутили эти ошибки-и относительно быстро. И отчасти потому, что это работа в этом случае заключается в следующем:child-srcбыло ошибкой, иframe-srcбыло на самом деле необходимо, и было ошибкой его осуждать.frame-srcне был устаревшим достаточно долго для браузеров, чтобы когда-либо отказаться от его поддержки, а также многие веб-разработчики никогда не удосуживались использоватьchild-srcДля начала.
Comments