Запутывание черных слов в WordPress с ROT13

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

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

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

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

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

Введение

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

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

Ниже приведена таблица 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: http://smashingmagazine.com/
Description: A simple plugin that detects and encrypts blacklisted words in ROT13
Version: 1.0
Author: Agbonghama Collins
Author URI: http://w3guy.com
Text Domain: rot13
Domain Path: /lang/
License: GPL2
*/

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

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

Settings page of the plugin.
(См. большую версию)

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

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

Во-первых, мы создаем элемент submenu в основном меню «Настройки» с 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 действию фильтра.

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

A post with the blacklisted word love encoded in ROT13

Упаковка

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

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

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

Обложка страницы изображение кредита: Википедия.

Источник: smashingmagazine.com

Великолепный Журнал

Великолепный, сокрушительный, разящий (см. перевод smashing) независимый журнал о веб-разработке. Основан в 2006 году в Германии. Имеет няшный дизайн и кучу крутых авторов, которых читают 2 млн человек в месяц.

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

%d такие блоггеры, как: