Java, UX, HTML, CSS, WEB-design

Обфускация слов из черного списка в WordPress с помощью ROT13

[ad_1]

  • Коллинз Агбонгама

  • 0 Комментарии

Обфускация слов из черного списка в WordPress с помощью ROT13

  • 10 минут чтения

  • WordPress, Техники (WP)

Краткое резюме ↬

В информатике существует бесчисленное множество алгоритмов шифрования данных. Одним из менее известных и менее распространенных методов шифрования является ROT13, производное от метода шифрования шифра Цезаря. В этом руководстве мы узнаем о шифровании ROT13 и о том, как оно работает. Мы увидим, как текст (или строки) можно программно закодировать в ROT13 с помощью PHP. Наконец, мы напишем плагин для WordPress, который сканирует пост на наличие слов из черного списка и заменяет их шифрованием ROT13.

В информатике существует бесчисленное множество алгоритмов шифрования данных. Одним из менее известных и менее распространенных методов шифрования является ROT13, производное от метода шифрования шифра Цезаря.

В этом руководстве мы узнаем о шифровании ROT13 и о том, как оно работает. Мы увидим, как текст (или строки) можно программно закодировать в ROT13 с помощью PHP. Наконец, мы напишем плагин для WordPress, который сканирует пост на наличие слов из черного списка и заменяет их шифрованием ROT13.

Дальнейшее чтение на SmashingMag:

  • Взгляд на современный серверный стек WordPress
  • Секреты блогов WordPress с высокой посещаемостью
  • Ускорение базы данных вашего сайта
  • Методы кэширования своими руками с помощью WordPress

Если у вас есть блог, в котором несколько авторов или определенная группа людей имеют право публиковать сообщения, вам может пригодиться плагин, который шифрует или полностью удаляет недопустимые слова.

Еще после прыжка! Продолжить чтение ниже ↓

Прежде чем мы начнем, давайте проясним кое-что о ROT13. Должно никогда использоваться для шифрования конфиденциальных данных. Хотя это считается методом шифрования, это пример шифрования «Hello World». Его очень легко взломать, и поэтому он никогда не используется для данных, которые зашифрованы из соображений безопасности. Поскольку наша цель не в защите данных, а в сокрытии ненормативной лексики, для нашего примера это вполне подойдет.

Введение

ROT13 (сокращение от «повернуть на 13 позиций», иногда сокращенно ROT-13) — это простой метод шифрования для английского языка, который заменяет каждую букву одной на 13 позиций вперед или назад по алфавиту. Итак, A становится N, B становится O и так далее до M, которая становится Z. Затем последовательность продолжается в начале алфавита: N становится A, O становится B и так до Z, которая становится M.

Главное преимущество ROT13 перед другими rot(N) методы (где «N» — целое число, обозначающее количество разрядов вниз по алфавиту в шифровании шифром Цезаря) заключается в том, что он является «самоинверсным», что означает, что для шифрования и дешифрования данных применяется один и тот же алгоритм.

Ниже приведена таблица ROT13 для удобства.


| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
--------------------------------------------------------------------------------------------------------  
| N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M |

Если бы мы зашифровали домен smashingmagazine.com в ROT13 результат будет fznfuvatzntnmvar.pbz, а предложение «Почему курица перешла дорогу?» станет «Jul qvq gur puvpxra pebff gur ebnq?»

Обратите внимание, что ROT13 влияет только на буквы алфавита. Цифры, символы, пробелы и все остальные символы остаются без изменений.

Преобразование строк в ROT13 в PHP

PHP включает функцию, str_rot13(), для преобразования строки в ее значение в кодировке ROT13. Чтобы закодировать текст в ROT13 с помощью этой функции, передайте текст в качестве аргумента функции.


<?php

echo str_rot13('smashingmagazine.com'); // fznfuvatzntnmvar.pbz

echo str_rot13('The best web design and development blog'); // Gur orfg jro qrfvta naq qrirybczrag oybt

Использование ROT13 в WordPress

Вооружившись этими знаниями, я подумал, как это может быть удобно в WordPress. В итоге я создал плагин, который кодирует слова из черного списка, найденные в сообщениях, с помощью ROT13.

Плагин состоит из textearea поле (находится на странице настроек плагина), в которое вы вводите слова из черного списка, которые затем сохраняются в базе данных для последующего повторного использования в сообщениях WordPress.

Без лишних хлопот приступим к кодированию плагина.

Настройка плагина

Во-первых, включите заголовок файла плагина.


<?php

/*
Plugin Name: Rot13 Words Blacklist
Plugin URI: https://smashingmagazine.com/
Description: A simple plugin that detects and encrypts blacklisted words in ROT13
Version: 1.0
Author: Agbonghama Collins
Author URI: https://w3guy.com
Text Domain: rot13
Domain Path: /lang/
License: GPL2
*/

Как уже упоминалось, плагин будет иметь страницу настроек с textarea поле, которое собирает и сохраняет слова из черного списка в базу данных WordPress (в частности, options Таблица).

Ниже приведен скриншот того, как будет выглядеть страница настроек (или администратора) плагина.

Страница настроек плагина.
(Смотрите большую версию)

Теперь, когда мы знаем, как будет выглядеть страница параметров, давайте создадим ее с помощью API настроек WordPress.

Создание страницы настроек

Во-первых, мы создаем пункт подменю в главном меню «Настройки» с помощью add_options_page()с его родительской функцией, подключенной к admin_menu действие.


add_action( 'admin_menu', 'rot13_plugin_menu' );

/**
 * Add submenu to main Settings menu
 */
function rot13_plugin_menu() {
    add_options_page(
        __( 'Rot13 Blacklisted Words', 'rot13' ),
        __( 'Rot13 Blacklisted Words', 'rot13' ),
        'manage_options',
        'rot13-words-blacklist',
        'rot13_plugin_settings_page'
    );
}

Пятый параметр add_options_page() имя функции (rot13_plugin_settings_page), который вызывается для вывода содержимого страницы.

Ниже приведен код для rot13_plugin_settings_page().


/**
 * Output the contents of the settings page.
 */
function rot13_plugin_settings_page() {
    echo '<div class="wrap">';
    echo '<h2>', __( 'Rot13 Blacklisted Words', 'rot13' ), '</h2>';
    echo '<form action="options.php" method="post">';
    do_settings_sections( 'rot13-words-blacklist' );
    settings_fields( 'rot13_settings_group' );
    submit_button();
}

Далее мы добавляем новый раздел на страницу «Настройки» с add_settings_section(). То textarea поле, о котором мы упоминали ранее, будет добавлено в этот раздел с add_settings_field(). Наконец, настройки регистрируются с помощью register_setting().

Ниже приведен код для add_settings_section(), add_settings_field() и register_setting().


    // Add the section
    add_settings_section(
        'rot13_setting_section',
        ’,
        'rot13_setting_section_callback_function',
        'rot13-words-blacklist'
    );

    // Add the textarea field to the section.
    add_settings_field(
        'blacklisted_words',
        __( 'Blacklisted words', 'rot13' ),
        'rot13_setting_callback_function',
        'rot13-words-blacklist',
        'rot13_setting_section'
    );

    // Register our setting so that $_POST handling is done for us
    register_setting( 'rot13_settings_group', 'rot13_plugin_option', 'sanitize_text_field' );

Три приведенные выше функции должны быть заключены в функцию и подключены к admin_init действие, например:


/**
 * Hook the Settings API to 'admin_init' action
 */
function rot13_settings_api_init() {
    // Add the section
    add_settings_section(
        'rot13_setting_section',
        ’,
        'rot13_setting_section_callback_function',
        'rot13-words-blacklist'
    );

    // Add the textarea field to the section
    add_settings_field(
        'blacklisted_words',
        __( 'Blacklisted words', 'rot13' ),
        'rot13_setting_callback_function',
        'rot13-words-blacklist',
        'rot13_setting_section'
    );

    // Register our setting so that $_POST handling is done for us
    register_setting( 'rot13_settings_group', 'rot13_plugin_option', 'sanitize_text_field' );
}

add_action( 'admin_init', 'rot13_settings_api_init' );

Чтобы я не забыл, вот код для rot13_setting_callback_function() и rot13_setting_section_callback_function() функции, которые будут выводить textarea поле и описание поля (вверху раздела) соответственно.


/**
 * Add a description of the field to the top of the section
 */
function rot13_setting_section_callback_function() {
    echo '<p>' . __( 'Enter a list of words to blacklist, separated by commas (,)', 'rot13' ) . '</p>';
}

/**
 * Callback function to output the textarea form field
 */
function rot13_setting_callback_function() {
    echo '<textarea rows="10" cols="60" name="rot13_plugin_option" class="code">' . esc_textarea( get_option( 'rot13_plugin_option' ) ) . '</textarea>';
}

На этом мы закончили создание страницы настроек для плагина.

Далее нужно заставить плагин обнаруживать слова из черного списка и шифровать их с помощью ROT13.

Обнаружение слов из черного списка и шифрование в ROT13

Вот обзор того, как мы будем обнаруживать слова из черного списка в записи WordPress:

  • Содержимое поста разбивается на отдельные слова и сохраняется в массив ($post_words).
  • Извлекаются слова из черного списка, которые были сохранены плагином в базе данных. Они тоже разбиваются на отдельные слова и сохраняются в массив ($blacklisted_words).
  • Мы перебираем $post_words массивы и проверьте наличие любого слова, которое находится в черном списке.
  • Если слово из черного списка найдено, то str_rot13() кодирует его в ROT13.

Пришло время создать функцию PHP (rot13_filter_post_content()), который фильтрует содержимое сообщения, а затем фактически обнаруживает слова из черного списка и шифрует их в ROT13.

Ниже приведен код фильтра поста.


/**
 * Encrypt every blacklisted word in ROT13
 *
 * @param $content string post content to filter
 *
 * @return string
 */
function rot13_filter_post_content( $content ) {

    // Get the words marked as blacklisted by the plugin
    $blacklisted_words = esc_textarea( get_option( 'rot13_plugin_option' ) );

    // If no blacklisted word are defined, return the post's content.
    if ( empty( $blacklisted_words ) ) {
        return $content;
    }

    else {

        // Ensure we are dealing with "posts", not "pages" or any other content type.
        if ( is_singular( 'post' ) ) {

            // Confine each word in a post to an array
            $post_words = preg_split( "/b/", $content );

            // Break down the post's contents into individual words
            $blacklisted_words = explode( ',', $blacklisted_words );

            // Remove any leading or trailing white space
            $blacklisted_words = array_map(
                function ( $arg ) {
                    return trim( $arg );
                },

                $blacklisted_words
            );

            // Iterate over the array of words in the post
            foreach ( $post_words as $key => $value ) {

                // Iterate over the array of blacklisted words
                foreach ( $blacklisted_words as $words ) {

                    // Compare the words, being case-insensitive
                    if ( strcasecmp( $post_words[ $key ], $words ) == 0 ) {

                        // Encrypt any blacklisted word
                        $post_words[ $key ] = '<del>' . str_rot13( $value ) . '</del>';
                    }
                }
            }

            // Convert the individual words in the post back into a string or text
            $content = implode( ’, $post_words );
        }

        return $content;
    }
}

add_filter( 'the_content', 'rot13_filter_post_content' );

В то время как приведенный выше код для filter функцию довольно легко понять, особенно потому, что она так сильно прокомментирована, что я все равно объясню немного подробнее.

То is_singular( ‘post’ ) условный тег гарантирует, что мы имеем дело с постом, а не со страницей или любым другим типом контента.

С участием preg_split()мы разбиваем содержимое сообщения на отдельные слова и сохраняем их в виде массива путем поиска шаблона RegEx. bчто соответствует границам слов.

Список занесенных в черный список слов извлекается из базы данных с помощью get_option()с участием rot13_plugin_option как имя опции.

Из скриншота страницы настроек плагина выше и описания textarea поле, мы видим, что слова в черном списке разделены запятыми, нашим разделителем. То explode Функция PHP разбивает слова из черного списка на массив путем поиска этих запятых.

Закрытие применяется к $blacklisted_words массив через array_map() это удалит начальные и конечные пробелы из значений массива (отдельные слова из черного списка).

То foreach конструкция перебирает слова сообщения и проверяет, есть ли какое-либо слово в массиве слов, занесенных в черный список. Любое обнаруженное слово из черного списка шифруется в ROT13 и заключено в <del> тег.

То $post_words массив преобразуется обратно в строку или текст и впоследствии возвращается.

Наконец, функция подключается к the_content действие фильтра.

Ниже скриншот поста со словами «любовь» и «навсегда», занесенными в черный список.

Пост со словом love из черного списка, закодированным в ROT13

Подведение итогов

ROT13 — это простой метод шифрования, который можно легко расшифровать. Таким образом, вы никогда не должны использовать его для серьезного шифрования данных.

Даже если вы в конечном итоге не будете использовать плагин, концепции, которые вы изучили при его создании, могут быть применены ко многим ситуациям, таким как запутывание или шифрование неуместных слов (например, ненормативной лексики) в ROT13, что было бы хорошей функцией в форум, где люди имеют право публиковать что угодно.

Надеюсь, вы узнали кое-что из этого урока. Если у вас есть какие-либо вопросы или предложения, сообщите нам об этом в комментариях.

Сокрушительная редакция
(дп, аль, ил)

Изображение на первой странице предоставлено Википедией.



[ad_2]
Source: https://smashingmagazine.com

Заключение

Вы ознакомились с статьей — Обфускация слов из черного списка в WordPress с помощью ROT13

Пожалуйста оцените статью, и напишите комментарий.

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован.

Краткое описание по статье Обфускация слов из черного списка в WordPress с помощью ROT13

Название: Обфускация слов из черного списка в WordPress с помощью ROT13 . Краткое описание: [ad_1] ⭐ Коллинз . Дата публикации: 08.02.2022 . Автор: Алишер Валеев .

Для чего создан сайт Novosti-Nedeli.ru

Данный сайт посвящен новостям мира и мира технологий . Также тут вы найдете руководства по различным девайсам.

Сколько лет сайту?

Возраст составляет 3 года

Кнопка «Наверх»