Что не так с URL-адресами, ориентированными на скрипты?

Я использую JSHint, и он получил следующую ошибку:

Script URL.

Я заметил, что это произошло потому, что в этой конкретной строке есть строка, содержащая URL-адрес javascript:....

Я знаю, что JSHint пожаловался на то, что из-за того, что установлена ​​опция scripturl, и поскольку моя кодовая база довольно велика, мне пока придется отключить ее.

Тем не менее, я не понял, в чем проблема использования URL-адресов скриптов?


person Metalcoder    schedule 21.11.2012    source источник
comment
@epascarello: Он спрашивает, почему.   -  person SLaks    schedule 21.11.2012
comment
Вот почему я не сделал это ответом! Вы, ребята, потрясающие!   -  person epascarello    schedule 21.11.2012


Ответы (1)


javascript: URL-адреса являются частью «eval is evil».

Чтобы выполнить URL-адрес javascript:, браузер должен запустить синтаксический анализатор JS и проанализировать текст URL-адреса.
Это медленный и дорогостоящий процесс.

Кроме того, сборка javascript: URL-адресов (или других строк, содержащих исходный код) — сложная задача, подверженная XSS-уязвимостям.

Наконец, смешивание кода и URL-адресов нарушает разделение контента и поведения (кода).

person SLaks    schedule 21.11.2012
comment
@Barmar: он должен проанализировать ваш тег <script>, несмотря ни на что. Однако лучше анализировать один более длинный скрипт, чем множество более коротких. - person SLaks; 21.11.2012
comment
Разве он не должен выполнять тот же синтаксический анализ, если вы поместите скрипт в <script> и вызовете его как функцию? Это хуже, потому что он должен анализировать JS, даже если вы никогда не нажимаете на ссылку. - person Barmar; 21.11.2012
comment
Разделение кода и содержимого: не более ли очевидно вставить URL-адрес скрипта, чем прикрепить событие к элементу, предотвратить значение по умолчанию и переопределить видимое содержимое в каком-то скрытом месте в коде? Как еще я могу отправить форму с помощью AJAX? - person bmacnaughton; 10.02.2017
comment
браузер должен запустить синтаксический анализатор JS и проанализировать текст URL-адреса. Как я могу подтвердить это утверждение? - person tsh; 22.12.2017
comment
@tsh: Как вы ожидаете, что браузер будет запускать код без его разбора? - person SLaks; 22.12.2017
comment
Браузер может специально оптимизировать ссылки, такие как javascript:; и javascript:void(0);, так как они довольно распространены. - person tsh; 24.12.2017
comment
Разработчики могут захотеть написать правильный HTML, поскольку именно этого мы от них и ожидаем. - person MatTheCat; 26.11.2018