Intereting Posts
PHP newline не работает в текстовом файле PHP regex анализирует данные между Представление PHP-формы, проверка переменных Laravel: Как удалить строки из нескольких таблиц с одинаковым идентификатором только с одним запросом? Какие существуют методы для создания большой системы уведомлений по электронной почте? Веб-сайт подходит для экрана для планшетов, видовое окно не работает? Не работает php strtotime Модуль по умолчанию Zend Framework 2 Как редактировать отдельную страницу в WordPress невозможно загрузить несколько изображений в папку для загрузки Как получить независимый от платформы сепаратор каталога в PHP? Symfony2 / FOSUserBundle – перенаправление после входа в систему согласно роли Неустранимая ошибка: Недостаточно памяти (выделено 1134559232) (попытался выделить 32768 байт) в X: \ wamp \ www \ xxx Laravel PSR-4 автоматически не загружает классы Флажки проверяются случайным образом

Отключить ввод javascript в форму

Я создаю «HTML-редактор» для моей веб-страницы. На данный момент я хочу, чтобы редактор разрешал ввод элементов HTML и CSS, а не Javascript (или JQuery, если на то пошло).

Я пытаюсь найти способ, который отключает использование <script> или <script type="text/javascript"> </script> с помощью PHP. Однако текущий способ выводит беспорядочный результат!

  $content_in_before = str_replace('<script','',$content_in_before); $content_in_before = str_replace('script>','',$content_in_before); 

Это также не очень хорошо закодировано!

Есть ли более пуленепробиваемый способ кодирования этого, останавливая использование всех типов Javascript в этой форме? (Хотя все еще разрешено использование CSS и HTML)?

Заранее спасибо!

Я бы рекомендовал использовать библиотеку санитарии, например, HTML-очиститель , поскольку для предотвращения атак XSS недостаточно просто отключить теги <script> , поскольку JS можно автоматически выполнить с помощью таких атрибутов, как onLoad , onMouseOver , onUnload и т. Д.

Чтобы удалить теги и разрешить некоторые из них, вы можете использовать strip_tags() PHP, но она не strip_tags() атрибуты, поэтому моя рекомендация для библиотеки санитарии HTML. Если вы можете запустить его, возможно, одним из лучших вариантов является библиотека Caja от Google, хотя она не работает в средах совместного размещения, поскольку она написана на Java, но может быть размещена в AppEngine от Google.

Кроме того, простые регулярные решения не всегда надежны, так как даже искаженные теги все еще могут быть проанализированы. Например, <script > не был бы пойман простым регулярным выражением обычных тегов скрипта, если он не ищет пробелы после имени тега. Это можно проверить, но использование установленной библиотеки сэкономит вам время и даст вам дополнительный бонус проверенной биткой библиотеки.

Пример: Теги сценариев с пробелами, генерирующие предупреждение

Вы могли бы повторить это

 echo preg_replace('/<script\b[^>]*>(.*?)<\/script>/is', "", $var); 

источник: https://stackoverflow.com/a/1886842/2046700

или как заявили нам, что вы сделали это для вас, например: http://htmlpurifier.org/

другой возможный пример:

 <?php $javascript = '/<script[^>]*?javascript{1}[^>]*?>.*?<\/script>/si'; $noscript = ''; $document = file_get_contents('test.html'); echo preg_replace($javascript, $noscript, $document); ?> 

Белые тэги, которые вы разрешаете, и атрибуты, которые вы разрешаете, затем удалите все остальное. Вы можете использовать DOMDocument для этого.

Я написал этот кусок кода один раз, но никогда его никто не рассматривал

 function legal_html($str, $tags='<a><b><br><i><span><table><tbody><tr><td><thead><th><img>', $attribArray=false) { if ($attribArray===false) { $attribs = array('id','class','src','href','alt'); } else { $attribs = $attribArray; } $stripped = strip_tags($str,$tags); $dom = new DOMDocument(); @$dom->loadHTML('<div>'.$stripped.'</div>'); foreach ($dom->getElementsByTagName('*') as $node) { for ($i = $node->attributes->length -1; $i >= 0; $i--) { $attrib = $node->attributes->item($i); if (!in_array($attrib->name,$attribs)) $node->removeAttributeNode($attrib); } } $stripped = $dom->saveHTML(); $start = strpos($stripped,'<div>')+5; $end = strrpos($stripped,'</div>'); $stripped = trim(substr($stripped,$start,$end-$start)); return $stripped; } 

Вы можете использовать что-то подобное,

 $content=$_POST['textbox']; if(strpos($content,'<script>')!==false){ //show error; } else{ //proceed with work; }