2017-01-04 5 views
3

Я вставлял некоторый код js (предоставляемый сторонней службой) на мою веб-страницу, и это нарушило мою проверку html. Как я могу исправить проблему? CDATA не делает этого. Это мой образец фрагмент кода:Почему CDATA не защищает мой код javascript от HTML-валидатора?

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
    <title>test</title> 
    <script type="text/javascript"> 
    /*<![CDATA[*/ 
    document.write('<script src="//sharebutton.net/plugin/sharebutton.php?type=horizontal&u=' + encodeURIComponent(document.location.href) + '"></scr' + 'ipt>'); 
    /*]]>*/ 
    </script> 
</head> 
<body> 

    <p>test</p> 

</body> 
</html> 

И here вы можете найти результат валидатора.

+1

Не могли бы вы объяснить мне, почему ваш код выглядит как XSS-инъекция? – Mouser

+1

Конец этого скрипта выглядит очень странно/подозрительно ' ''? – Liam

+3

@Liam - Он останавливает '' интерпретируется как конечный тег для действительного элемента скрипта. – Quentin

ответ

4

<![CDATA[* - это функция XML, а не HTML. Это просто часть текстового содержимого элемента сценария в HTML-выражениях.

Чтобы безопасно включить строку </script> в строку JavaScript буквального в HTML: слеш:

'"><\/script>') 
+0

Это работает как очарование! Благодарю. Это легче, когда вы знаете, что делаете ... Мне понадобилось время, чтобы разобраться с проблемой! – andreaconsole

-4

Я думаю, все это не так вот ваш вложенной блок комментариев. Попробуйте это вместо этого ...

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
    <html> 
    <head> 
     <title>test</title> 
     <script type="text/javascript"> 
     /*<![CDATA[ 
     document.write('<script src="//sharebutton.net/plugin/sharebutton.php?type=horizontal&u=' + encodeURIComponent(document.location.href) + '"></scr' + 'ipt>'); 
     ]]>*/ 
     </script> 
    </head> 
    <body> 

     <p>test</p> 

    </body> 
    </html> 
+1

Комментарий не должен окружать весь сценарий. Цель состоит в том, чтобы предоставить флаги CDATA для парсеров HTML (за исключением того, что они работают только с синтаксическими анализаторами XML), и прокомментировали их из парсера JavaScript. Комментируя весь сценарий, он просто перестанет работать по-другому. – Quentin

Смежные вопросы