Очень важно сообщить браузеру, какой тип данных вы отправляете. Разница должна быть очевидной. Попробуйте просмотреть в браузере вывод следующего PHP-файла:
<?php
header('Content-Type:text/html');
?>
<p>Hello</p>
Вы увидите:
привет
(обратите внимание, что вы получите те же результаты, если пропустите строку заголовка в этом случае - text / html по умолчанию в php)
Измените его на текстовый / обычный
<?php
header('Content-Type:text/plain');
?>
<p>Hello</p>
Вы увидите:
Hello
Почему это имеет значение? Если у вас есть что-то вроде следующего в php-скрипте, который, например, используется ajax-запросом:
<?php
header('Content-Type:text/html');
print "Your name is " . $_GET['name']
Кто-то может разместить ссылку на URL-адрес, например http://example.com/test.php?name=%3Cscript%20src=%22http://example.com/eviljs%22%3E%3C/script%3E, на своем сайте, и, если пользователь щелкнет по нему, он предоставит всю свою информацию на вашем сайте тому, кто разместит ссылку. Если вы используете файл как текст / обычный текст, вы в безопасности.
Обратите внимание, что это глупый пример, более вероятно, что злонамеренный тег сценария будет добавлен злоумышленником в поле в базе данных или с помощью отправки формы.