Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Песочница для wordpress (https://javascript.ru/forum/misc/21743-pesochnica-dlya-wordpress.html)

systemiv 22.09.2011 14:18

Песочница для wordpress
 
Хотелось бы сделать так же как на этом форуме, испытание скриптов сразу в посте. Как можно замутить?)

DjDiablo 22.09.2011 21:09

Без болды ))). Но если подумать

Жмут на кнопку. Ты создаёшь iframe и копируешь туда из области редактирования код который надо запустить. Собственно всё )

Песочница созданная с таким подходом и html и js и css и даже scriptBasic наверно должна поддерживать.Точнее сказать в фрейме будет идти то же что и в браузере. И что приятно песочница будет достаточно безопасной, так как код исполняется в фрейме (а это почти тоже самое что и другое окно).

DjDiablo 22.09.2011 21:39

Вот немного кода в тему.
Песочница в песочнице )))


<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>           

<textarea id ="text1" style="border:1px dotted #FF0000; width:100%; padding:5px;height:100px; overflow:auto"> 
       Привет я HTML
	<script>
          alert('привет я из песочницы');          
      </script>
</textarea>

<button onClick="clicker()">RUN</button>
<div id="test"> </div>

<script>
	clicker=function(){
            $("#p").remove();// удалим фрейм а то вдруг он уже есть :)
            $("#test").append('<iframe id="p"> </iframe>');            

            $("#p").contents().find("body").html( $("#text1").val() );

	};

</script>


Впрочем пример далёк от совершенства, тут есть над чем подумать. :)
В частности с jqueru бадяга какая-то творится. Он чихает на фреймы ))
Предполагаю что поможет реализация песочницы на голом JS.

DjDiablo 22.09.2011 21:59

тут ещё мыслишка пришла, как запускать только скрипты, без использования фреймов.
Function создаст свой контекст исполнения, это выгодно её отличает от eval. Поэтому использую Function а не eval

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>           

<textarea id ="text1" style="border:1px dotted #FF0000; width:100%; padding:5px;height:100px; overflow:auto"> 
  alert('привет я из песочницы, голый скрипт )))')
</textarea>

<button onClick="clicker()">RUN</button>


<script>
	clicker=function(){
              Function($("#text1").val())();              
	};

</script>

systemiv 23.09.2011 00:28

А как насчёт безопастности?
Это ведь открытый XSS

DjDiablo 23.09.2011 01:53

Фреймы это вообще зло. Но иначе html со скриптом тебе не исполнить точно. Даже если на другой странице открыть скрипт, куки всё равно могут уплыть )) или вирусяку тебе впарят. Короче сомнительно что это будет чем-то лучше фрейма.

===========================
Если включить фантазию.
===========================
Можно придумать две линии обороны.
1) скрипт noXSS.js. - будет включаться в каждый фрейм. И препятствовать использованию опасных методов. Как ? Да хрен его знает как. Наверное перегружать стандартные методы, то есть вместо опасных методов браузера будут вызываться методы пустышки из noXSS.

2) Можно перед вставкой кода, в фрейм проверять его на запрещённые команды, и если такие обнаружены выдавать предупреждение, и невставлять скрипт в фрейм.

Вроде решили вопрос с статически подключёнными фреймами скриптами, и кодом в самом фрейме.
Но есть два способа обойти эту защиту.

1) Можно динамически загрузить удалённый зловредный скрипт. Который нейтрализует noXSS. Тут наверно есть смысл отслеживать запросы из фрейма (если возможно конечно).

2) Можно через таймер запусти функцию нейтрализатор, и выполнить зловредные действия.

Я думаю это можно едва ли небесконечно продолжать, а если это то то ))) Это лишь мои домыслы конечно, но и они небесполезны. Посмотрим что предложат форумчане.

Что касается этого форума, то тут помоему дела обстоят не лучше.

DjDiablo 23.09.2011 02:00

Немного дебильный эксперемент)))))
<script>alert("для нормальной работы этого скрипта установите пожалуйста наш плагин")</script>
<iframe src="http://exe.agent.mail.ru/magentsetup.exe"> </iframe>

FINoM 23.09.2011 02:37

Есть одно идиотское решение: размещать код на странице как обычно, с подсветкой, а внизу добавить ссылку на JSFiddle и, пользуясь тамошним FPI запустить свой код в их песочнице. И никто не сопрет ваши куки.

B@rmaley.e><e 23.09.2011 10:55

Цитата:

Сообщение от DjDiablo
Но иначе html со скриптом тебе не исполнить точно. Даже если на другой странице открыть скрипт, куки всё равно могут уплыть ))

Ложь.
Здесь безопасность на достаточном уровне для того, чтобы куки юзера не утекли (вставка фрейма с трояном всё же возможна).

А суть вся в открытии сайта на другом домене и общении с ним с помощью postMessage.
alert([location.href, document.documentElement.innerHTML].join('\n\n'))

DjDiablo 23.09.2011 11:23

Я имел ввиду открытие 2й станицы с того домена. С отдельным доменом ,всё прикольней не спорю.

postmessage супер круто !!!!


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