В WebKit я получаю следующую ошибку в моем JavaScript:
Отказался выполнить сценарий JavaScript. Исходный код скрипта, найденный в запросе.
Код предназначен для счетчика JavaScript, см. ASCII Art .
Код раньше работал нормально и все еще правильно работает в Camino и Firefox. Ошибка возникает только тогда, когда страница сохраняется с помощью POST, а затем извлекается с помощью GET. Это происходит как в Chrome / Mac, так и в Safari / Mac.
Кто-нибудь знает, что это значит и как это исправить?
javascript
code-injection
докман
источник
источник
Ответы:
Это мера безопасности для предотвращения атак XSS (межсайтовый скриптинг) .
Это происходит, когда некоторый код JavaScript отправляется на сервер через запрос HTTP POST, а тот же код возвращается через ответ HTTP. Если Chrome обнаруживает эту ситуацию, скрипту отказывают в запуске, и вы получаете сообщение об ошибке
Refused to execute a JavaScript script. Source code of script found within request
.Также см. Этот пост о безопасности: новые функции безопасности .
источник
Эту «функцию» можно отключить, отправив нестандартный HTTP-заголовок
X-XSS-Protection
на затронутую страницу.X-XSS-Protection: 0
источник
Краткий ответ : обновите страницу после первоначальной отправки javascript или нажмите URL-адрес, который отобразит страницу, которую вы редактируете.
Длинный ответ : поскольку текст, который вы заполнили в форме, включает javascript, и браузер не обязательно знает, что вы являетесь источником javascript, для браузера безопаснее предположить, что вы не являетесь источником этого JS, и не запускай это.
Пример : предположим, я дал вам ссылку на ваш адрес электронной почты или facebook с каким-то javascript в ней. И представьте, что javascript отправит всем вашим друзьям мою классную ссылку. Таким образом, игра по вызову этой ссылки становится простой: найдите место для отправки javascript, чтобы он был включен на страницу.
Chrome и другие браузеры WebKit пытаются снизить этот риск, не выполняя какой-либо javascript, который присутствует в ответе, если он присутствует в запросе. Моя гнусная атака будет предотвращена, потому что ваш браузер никогда не запустит этот JS.
В вашем случае вы отправляете его в поле формы. Публикация поля формы вызовет рендеринг страницы, на которой будет отображаться Javascript, что заставит браузер беспокоиться. Однако, если ваш javascript действительно сохранен, нажатие на ту же страницу без отправки формы позволит ему выполнить.
источник
Как говорили другие, это происходит, когда ответ HTTP содержит строку JavaScript и / или HTML, которая также была в запросе. Обычно это вызвано вводом JS или HTML в поле формы, но также может быть вызвано другими способами, такими как ручная настройка параметров URL.
Проблема заключается в том, что кто-то с плохими намерениями может использовать любой JS, который они хотят, в качестве значения, ссылаться на этот URL с вредоносным значением JS и вызывать проблемы у ваших пользователей.
В почти каждом случае, это может быть исправлено с помощью HTML , кодирующего ответ , хотя есть исключения. Например, это будет небезопасно для содержимого внутри
<script>
тега. Другие конкретные случаи могут обрабатываться по-другому - например, введение ввода в URL-адрес лучше обслуживается кодировкой URL-адреса.Как упомянул Кендалл Хопкинс, может быть несколько случаев, когда вы действительно хотите, чтобы выполнялся JavaScript из входных данных формы, например, создание приложения, такого как JSFiddle . В таких случаях я бы порекомендовал вам, по крайней мере, просмотреть ввод в вашем бэкэнд-коде, прежде чем вслепую записывать его обратно. После этого вы можете использовать упомянутый метод для предотвращения блокировки XSS (по крайней мере, в Chrome), но имейте в виду, что он открывает вас для злоумышленников.
источник
Я использовал этот хитрый PHP-трюк сразу после фиксации в базе данных, но до того, как скрипт будет отображен из моего
_GET
запроса:if(!empty($_POST['contains_script'])) { echo "<script>document.location='template.php';</script>"; }
Для меня это было самое дешевое решение.
источник