Поэтому я провел эксперимент с функцией php htmlspecialchars() с входом из браузера. Это работает, и значение, отраженное от базы данных, не запускает скрипт. Однако, если я ввожу скрипт непосредственно в базу данных, то есть в phpMyAdmin, коды:
<?php echo htmlspecialchars($row['fname'], ENT_QUOTES | ENT_HTML5, 'UTF-8');?>
А также
<?php echo htmlspecialchars($row['lname']);?>
По-прежнему запускает javascript, который я поместил прямо в базу данных в браузере. Это связано с типом сортировки базы данных или с чем-то еще?
Вы храните этот PHP в своей БД?
Нет, это пример кода в файле php. Я попытался вставить в базу данных прямой js-скрипт, который все еще работал даже с htmlspecialchars






JavaScript (с точки зрения PHP/MySQL) — это просто строка, как и любая другая строка.
Вам нужно знать, когда/что/как фильтр и когда/что/как побег.
Фильтр: отфильтровывает вредоносные строки до и вставляет их в базу данных. Нравится функция strip_tags()
Побег: Экранирующие символы (например, ", ', <, > и т. д.) до распечатывают результат, который может дать вам нежелательный результат. Нравится функция htmlspecialchars()
Хранить JavaScript в БД, а затем выводить его в браузер легко, но и опасно! Убедитесь, что это разрешено только пользователям с правами администратора.
Так что в идеале перед публикацией данных я должен использовать $variable = strip_tags($_POST['variable']); then use htmlspecialchars()` для эха? Мне придется снова проверить код, htmlspecialchars() по-прежнему не препятствует запуску скрипта на этом ` <?php echo htmlspecialchars($row['lname']);?>`
@Deer-san Просто щелкните правой кнопкой мыши> просмотреть исходный код страницы и посмотрите, что из этого выйдет. Если вы хотите распечатать код JavaScript в HTML как читаемый текст для пользователей, вам нужно просто заменить < на < и заменить > на >. Замена этих символов на самом деле выполняется htmlspecialchars()
Почему вы отметили
javascriptсвой вопрос, если ваш вопрос не имеет отношения к языку? Я бы посоветовал вам удалить его, прежде чем вы обнаружите, что ваш вопрос был отклонен или закрыт.