Вниз  Безопасность. Запуск кода на странице
- 30.08.2014 / 20:23
Microwap
  Пользователь

Microwap 
Сейчас: Offline
Хочу сделать для своего форума возможность запуска HTML JS кодов для просмотра.
Что бы долго не объяснять вот пример

Вопрос собственно, как обезопасить это дело, что бы избежать кражи сессии и XSS
- 30.08.2014 / 21:46
ВитаминКО
  Супермодератор

ВитаминКО 
Сейчас: Online
Microwap, codepen, htmlbook?
__________________
 わからない!!
- 30.08.2014 / 22:42
Microwap
  Пользователь

Microwap 
Сейчас: Offline
Предлагаешь все это перечитать? О_о
Короче говоря я уже нашел решение =)
Хотя если у кого есть мысли (а еще лучше коды :-D ), буду рад выслушать.
- 30.08.2014 / 23:25
Microwap
  Пользователь

Microwap 
Сейчас: Offline
Собственно сделал следующим образом
  1. <button onclick="run('code');" >Run</button>
  2. <pre id="code" style="overflow: auto;">Тут код после htmlspecialchars </pre>

  1. <script type="text/javascript">
  2. function run (id)
  3.  {    
  4.  var
  5.      f=document.createElement("form");
  6.      f.method="post";
  7.      f.action="code.php"; // скрипрт приемник
  8.  var
  9.     i = document.createElement('input');
  10.     i.type = 'text';
  11.     i.name = 'content';
  12.     i.value =  document.getElementById(id).innerHTML;
  13.     f.appendChild(i);  
  14.     f.submit();
  15.  }
  16. </script>
Код приемника (code.php)
  1. <!DOCTYPE html>
  2. <html>
  3.  <head>
  4.   <meta charset="utf-8">
  5.   <title>Пример</title>
  6. </head><body>  
  7. <script type="text/javascript">
  8. function run(cont){var w = open();w.document.write(cont);}
  9. <?
  10. $content = str_replace('<br>','',$_POST['content']);
  11. $content = html_entity_decode($content);
  12. $content = preg_replace('|\s+|', ' ', $content);
  13. $content = addslashes($content);
  14. $content = str_replace('>','\>',$content);
  15. $content = str_replace('<','\<',$content);
  16. echo 'var cont = "'.$content.'";';
  17. ?>
  18. </script>
  19. <div class="head">Запуск кода со страницы</div>
  20. <button onclick="run(cont);" >Да</button>
  21. <button onclick="javascript:history.go(-1);" >Нет</button>
  22. </body>
  23. </html>

Вот пример Только ржать не надо =)

Вроде бы вполне себе безопасно.
- 31.08.2014 / 00:29
Microwap
  Пользователь

Microwap 
Сейчас: Offline
Короче подумал еще и решил таки – НУ ЕТО НАФИГ =) хотя идея хорошая была ) :-D
- 8.08.2024 / 23:11
ЕжоргийЧерчилич
  Пользователь

ЕжоргийЧерчилич 
Сейчас: Offline
Цитата Microwap:
Собственно сделал следующим образом
  1. <button onclick="run('code&apos;);" >Run</button> <pre id="code" style="overflow: auto;">Тут
  1. <textarea name="textarea"></textarea>
  2. <iframe name="iframe"></iframe>
  3. <button onclick="abc()">abc</button>
  4. <script>
  5.     abc=()=>{
  6.         iframe.contentWindow.parent="";
  7.         iframe.contentDocument.write(textarea.value);
  8.     }
  9. </script>
Далее всё лишнее CORS'ом ограничить, и норм

Изменено ЕжоргийЧерчилич (8.08 / 23:13) (всего 2 раза)
- 9.08.2024 / 18:15
Tygrain
  Пользователь

Tygrain 
Сейчас: Offline
ЕжоргийЧерчилич, в 2014 не было стрелочных функций в браузерах :gg:
- 9.08.2024 / 21:57
ЕжоргийЧерчилич
  Пользователь

ЕжоргийЧерчилич 
Сейчас: Offline
Цитата Tygrain:
ЕжоргийЧерчилич, в 2014 не было стрелочных функций в браузерах :gg:
Зато были обычные
Наверх  Всего сообщений: 8
Фильтровать сообщения
Поиск по теме