За последние 24 часа нас посетили 16676 программистов и 1718 роботов. Сейчас ищут 1823 программиста ...

Все символы на странице html

Тема в разделе "PHP для новичков", создана пользователем Неугомонный, 6 янв 2024.

  1. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Что-то я нафильтрировал, правильно я обработал ?
    Моя esc() - mysqli_escape_string
    PHP:
    1. function htmlEnc($string)
    2. {
    3.     $string = htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
    4.  
    5.     $k = ['&', '"', ''', '<', '>'];
    6.     $x = ['&', '"', '\'', '<', '>'];
    7.     return str_replace($k, $x, $string);
    8. }
    Решил отдельно не обрабатывать $_POST, пустил по кругу )))
    PHP:
    1. $username = htmlEnc(esc(trim($_POST['username'])));
    В базу так и заносятся символы <> и на странице выводятся <>
    Что-то моей логике не поддается функцию сообразил , htmlspecialchars($string, ENT_QUOTES, 'UTF-8') этот момент понятен в крякозябры я превратил , ниже я из этих крязозябр вывожу обратно в символы.
    И ВОПРОС , вставив в базу данных/или форму ввода <script>...</script> внедрится ли он в код ? Вроде и htmlspecialchars есть , а вроде после его я обратно символы вернул
    Как бы и фильтр есть и как бы всё вернул , вопрос на хрена тогда я эти все махинации проводил. Но типа подсказали если хочешь вернуть сиволы перезапиши их обратно
    :mad::confused:
     
    #1 Неугомонный, 6 янв 2024
    Последнее редактирование: 6 янв 2024
  2. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    406
    Симпатии:
    77
    Адрес:
    Бавария, Германия
    Добрый день!
    Уточню вопрос:
    Будет ли исполняться JS , если в PHP вместо "<script>...</script>", записать,
    например, "&lt;script&gt;&lt;script&gt;alert(2)&lt;/script&gt;&lt;/script&gt;"?
    В первом случае браузер интерпретирует строку как JS, во втором внедрит в НTML код, но не исполнит JS.
    PHP:
    1. <?
    2.     $k = ['&amp;', '&quot;', '&#039;', '&lt;', '&gt;'];
    3.     $x = ['&', '"', '\'', '<', '>'];
    4.     $str1 =implode(" ", $k);
    5.     $str2 =implode(" ", $x);
    6.     $script1 = "<script>alert(1)</script>";
    7.     $script2 = "&lt;script&gt;alert(2)&lt;/script&gt;";
    8.     echo <<<HTML
    9.     $str1<br>
    10.     $str2<br>
    11.     $script1
    12.     $script2
    13.     HTML;
    14.     /*
    15.     Output:
    16.     & " ' < >
    17.     & " ' < >
    18.     <script>alert(2)</script>
    19.     */
    20. ?>
    Удачи!
     
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.850
    Симпатии:
    745
    Адрес:
    Татарстан
    Нефиг использовать велосипеды, подготовленные выражения для сохранения в БД.
    А для вывода - экранирование через htmlspecialchars
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.828
    Симпатии:
    651
    Mля, нафига кодировать в HTML, чтобы потом осн. сущности заменять обратно? :(
    --- Добавлено ---
    Ну, тогда ее нужно запускать в последнюю очередь перед записью в БД ;)
    --- Добавлено ---
    Самая простая стратегия для коротких строк, как выше написали, кодировать в HTML при выводе (если вывод выполняется на Web-страницу и т.п.). Экранирование для записи в БД и HTML-кодирование смешивать не стоит. Для записи обычно лучше просто использовать подготовленные запросы.
    --- Добавлено ---
    Под короткими я подразумевал строки, в которых не должны оставаться теги. Конечно, такие строки могут бы и длинными. Но кодировать при выводе лучше только короткие строки.

    Кодировать при вводе сложнее. Например, размер поля username в БД нужно делать в пять раз больше макс. длины до кодирования.
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.828
    Симпатии:
    651
    Замудохаешься при выводе чистить «богатый» тегами текст от левых тегов и т.п.
     
  6. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Предлагаю пойти дальше отказаться от prepare и html special chars , и всё вылизывать регулярками. А что ?))
    Я хочу на сайте себе ник < kick > , конечный итог 90% примеров в Гугле учит нас четко идти по шаблону 2002 года a-zA-Z0-9 , моё мнение на сегодня пользователь никак не в вводе пароля не в вводе имени не стоит ограничивать , и как отобразится ник без велосипеда в чистом виде после обработки htmlspecialchars? &lt; kick &gt;
     
  7. Неугомонный

    Неугомонный Активный пользователь

    С нами с:
    10 фев 2018
    Сообщения:
    192
    Симпатии:
    3
    Хоть бы один нормальный человек написал что &lt; kick &gt; автоматически преобразовываются при выводе на страницу htmlspecialchars, а я почитал в доке что они конвертируются в сущности не проверил изобрел целую схему как вернуть обратно открыл обратно дырки и думаю как бы их обработать :eek:
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.828
    Симпатии:
    651
    Ну, нормальные люди, прежде чем что-то делать, обычно имеют представление о том, зачем это делать. Мы как бы на нормальных ориентировались :)
    --- Добавлено ---
    Тут тоже все просто и логично. Если теги, например <br>, имеют особое значение, должен быть способ выводить аналогичный текст.