Что выведет код Junior Сессии и безопасность обновлено

Что делает htmlspecialchars

Вопрос

Что выведет скрипт (PHP 8.3)? По строке на каждый вывод.

<?php
$s = '<a href="x" onclick=\'go()\'>Tom & Jerry</a>';
echo htmlspecialchars($s), "\n";
echo htmlspecialchars("O'Reilly", ENT_NOQUOTES), "\n";
echo strip_tags('<b>bold</b><script>x()</script>'), "\n";
var_dump(password_verify('secret', password_hash('secret', PASSWORD_DEFAULT)));
var_dump(hash_equals('abc', 'abd'));

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: &lt;a href=&quot;x&quot; onclick=&#039;go()&#039;&gt;Tom &amp; Jerry&lt;/a&gt;, O'Reilly, boldx(), bool(true), bool(false). С PHP 8.1 флаги по умолчанию ENTQUOTES ENTSUBSTITUTE ENTHTML401, поэтому экранируются и двойные, и одинарные кавычки (&039;).

Что выведет

&lt;a href=&quot;x&quot; onclick=&#039;go()&#039;&gt;Tom &amp; Jerry&lt;/a&gt;
O'Reilly
boldx()
bool(true)
bool(false)

Разбор

С PHP 8.1 флаги по умолчанию ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, поэтому экранируются и двойные, и одинарные кавычки (&#039;). С ENT_NOQUOTES апостроф остаётся. strip_tags удаляет теги, но оставляет их содержимое, включая текст скрипта: это не защита от XSS. Хеш проверяется password_verify, а hash_equals сравнивает строки за постоянное время.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.