Недавно вышли новости. Четыре сотрудника Департамента сетевой безопасности Alibaba использовали уязвимости веб -страницы для написания сценариев JS для захвата лунных пирожных, поэтому они были заинтригованы. Они хотели знать, как написать этот сценарий JS и как реализовать различные заказы и захваты оружия.
Что такое атака инъекции JavaScript?
1. Всякий раз, когда контент, введенный пользователем и Redisplayed, веб -сайт уязвим для атак JavaScript. Давайте посмотрим на конкретное применение, которое уязвимо для атак JavaScript. Предположим, что веб -сайт отзывов клиентов был создан. Клиенты могут посетить веб -сайт и ввести информацию об обратной связи о продукте. Когда клиент подает обратную связь, информация об обратной связи заносится вновь на странице обратной связи.
Веб -сайт отзывов клиентов - это простой веб -сайт. К сожалению, этот сайт уязвим для атак JavaScript.
Предположим, что в форму обратной связи клиента вводится следующий текст:
<Script> оповещение (атака!) </script>
Этот текст представляет собой скрипт JavaScript, который отображает поле предупреждения. После того, как кто -то передает этот сценарий в форму обратной связи с клиентом, атаку сообщения! будет отображаться, когда кто -то посетит веб -сайт отзывов клиентов в будущем.
2. Другой тип - ввести часть кода JS в адресной строке браузера, чтобы изменить содержание переменных страницы JS и метки страниц.
Используя JavaScript, пользователи могут изменить свой контент без закрытия или сохранения веб -страниц, что выполняется в адресной строке браузера. Синтаксис команды заключается в следующем:
JavaScript: Alert (#Команда#)
Например, если вы хотите увидеть поле предупреждения о предупреждении на сайте http://www.example.com, сначала введите URL -адрес в адресной строке и подождите, пока страница загрузится, затем удалите URL и введите:
JavaScript: оповещение (Hello World)
Как новый URL. Это появит поле «Hello World Warning», используя эту технику, чтобы изменить почти все на веб -странице, например, на картинке. Предположим, есть изображение логотипа веб -сайта, и мы находим один из HTML -кода, посмотрев на исходный файл страницы:
<Img name = hi src = hello.gif>
Изображение названо HI, исходным файлом hello.gif, мы хотим изменить его на файл bye.jpeg, хранящийся на нашем сайте (http://www.mysite.com), поэтому полный адрес URL -адреса изображения http://www.mysite.com/bye.jpeg, использование Javascript Incoption, мы просто нуждаемся в введении в адрес
JavaScript: alert (document.hi.src = http: //www.mysite.com/bye.jpeg)
Вы увидите всплывающее окно по предупреждению http://www.mysite.com/bye.jpegalert, и изображение изменено. Следует отметить, что эти изменения только временные! Если вы обновляете страницу или повторно введите изменения, ваши изменения исчезнут, потому что вы просто внесли эти изменения на своем ПК, а не на веб-сервере.
Используя тот же метод, который мы можем просмотреть или изменить значение переменной, например, мы находим такую часть кода на веб -странице:
<Script language = javascript> var a = test </script>
Это означает, что значение переменной a является тестом, и теперь мы вводим:
JavaScript: оповещение (а)
Затем мы меняем его значение на Hello:
JavaScript: оповещение (a = hello)
Инъекция JavaScript обычно используется для изменения свойств формы, если предположить, что есть кусок кода, подобного этому:
<form name = format action = send.php method = post> <input type = hidden name = mail [email protected]> <input type = text name = name> <input type = propect value = propect> </form>
Мы хотим, чтобы форма отправила в наш почтовый ящик, а не на кого -то по адресу по адресу. Вы можете использовать следующую команду:
javaScript: alert ([email protected])
• Возможно, вы заметили иерархические отношения этих команд:
• Мы объясняем по порядку слева направо:
• 1) Самый левый - это документ
• 2) Тогда есть имя объекта, которое мы хотим изменить (например, document.hi.src) или объект, который он содержит (например, document.format.mail.value)
• 3) Наконец, существует свойство, которое мы хотим изменить (например, путь источника: document.hi.src или значение переменной: document.format.mail.value)
• 4) Использовать.
• 5) Когда мы хотим изменить значение атрибута, мы используем значение = знак и новое значение атрибута
•*Примечание. Когда новое значение атрибута - это строка (например: document.format.mail.value
• Если мы хотим использовать его в качестве значения для переменной, нам не нужно использовать двойные кавычки. Например, если мы хотим присвоить значение переменной b с переменной a, мы можем ввести JavaScript: alert (a = b).
• Однако большинство тегов на странице не имеют имен, таких как:
<form action = send.php method = post> <input type = hidden name = mail [email protected]> <input type = text name = name> <input type = отправить значение = отправить> </form>
В этом коде нет имени формы. На основе вышеуказанной информации вы можете использовать эту команду:
JavaScript: Alert (Document. .Mail.Value = [email protected])
В этом случае мы должны сосчитать и найти номер последовательности формы, и следующее приведен:
<form action = send.php method = post> <input type = text name = name> <input type = propect value = propect> </form> <form action = send.php method = post> <input type = hidden name = mail [email protected]. значение = отправить> </form>
• В приведенном выше коде мы видим 3 формы, но нас интересует только второе, поэтому номер формы, который мы хотим, составляет 2. Не забывайте, что мы начинаем с 1, например, 1, 2, 3, 4 ... в то время как JavaScript начинается с 0, например, 0, 1, 2, 3 ... так что настоящий номер формы составляет 1, а не 2. Обычно мы должны вычесть обнаруженную форму на один. Мы будем использовать этот серийный номер, чтобы завершить нашу команду:
JavaScript: Alert (document.forms [1] .mail.value = [email protected])
• Таким образом, вы можете изменить изображение или ссылку без имени, и вы можете изменить формы на любой тип тега, который вы хотите. Для картин
JavaScript: Alert (Document.Images [3] .src =#URL -адрес изображения, которую вы хотите#)
Для ссылки
javascript: alert (document.links [0] .href =#URL, который вы хотите#)
Наконец, мы можем использовать эту технику для редактирования файлов cookie. Следующая команда записывается DR_AMADO из riviaSecurity.net, и я изменил ее лишь немного, чтобы он появился до того, как пользователь его редактирует. Вам просто нужно скопировать их в адресную строку:
javascript: alert (window.c = function a (n, v, nv) {c = document.cookie; c = c.substring (c.indexof (n)+n.length, c.length); c = c.substring (1, ((c.indexof (;)>-1)? C.indexof (;): C.Length)); NC = Unescape (C) .Replace (V, NV); Document.COKIE = N+=+ESCOPECT (NC); вернуть Unescape (Document.cookie);}); Alert ('the Cookie:'+Document.cookie+''); Alert (C romplet (название Cookie:, stick (rompt wrome), rasce), призыв), подсказка):// Если вы хотите вручную изменить свой cookie, вы можете использовать следующую команду:
JavaScript: Alert (document.cookie)
Это отобразит ваши текущие файлы cookie, предполагая userId = 1, если вы хотите изменить его на userId = 2, вы можете использовать следующую команду:
JavaScript: Alert (document.cookie = userId = 2)
Наконец, я должен подчеркнуть, что все изменения только на стороне клиента! Это похоже на сохранение веб -страницы на вашем компьютере и изменение ее. Тем не менее, используя этот трюк, вы все еще можете обмануть страницу (например, файлы cookie) или обходной проверки безопасности. Например, некоторые веб -страницы обнаруживают местоположение, где пользователь отправляет данные. Если вы отправляете данные с http://www.test.com/form.php на http://www.test.com/check.php, Check.php может определить, поступают ли данные из формы на http://www.test.com/form.php. Кроме того, если вы планируете ввести свой собственный код JavaScript в страницу, используя некоторые из этих трюков, вы сможете изменить картинку и оставить его одинаково!
Наконец, поскольку инъекция JS настолько ужасна, какие решения мы должны предотвратить инъекцию JS на веб -сайте, который мы написали сами?
Метод 1:
Простой способ предотвратить атаки впрыскивания JavaScript - это кодировать данные, введенные любым пользователем веб -сайта в HTML, когда в представлении повторно играет данные.
Например: <%= html.encode (обратная связь.message)%>
Что означает использование HTML для кодирования строки? При использовании HTML для кодирования строк опасные символы, такие как <и>, заменяются HTML -сущностями, такими как <и>. Итак, когда строка <script> alert (boo!) Браузер больше не выполняет сценарии JavaScript при анализе кодируемых строк. Вместо этого он показывает безвредные страницы.
Метод 2:
В дополнение к использованию HTML для кодирования данных при отображении данных в представлении, вы также можете использовать HTML для кодирования данных перед отправкой в базу данных.
Stringescapeutils.escapehtml (данные, представленные на стойке регистрации);
Часто люди предпочитают использовать первый метод, обсуждаемый в этом уроке, а не второй метод. Проблема со вторым подходом заключается в том, что кодируемые HTML данные в конечном итоге будут сохранены в базе данных. Другими словами, данные в базе данных будут содержать странные символы. Каково это недостаток в этом? Если вам нужно отобразить данные базы данных в форме, отличной от веб -страницы, вы столкнетесь с проблемами. Например, данные не могут быть легко отображены в приложениях Windows Forms.
Спасибо пользователям сети за обмен: http://zxf-noimp.iteye.com/blog/1130771
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.